Search code examples
androidsessiontwitterupload

Sharing image on twitter from android programatically


in my app i logged in via Twitter it gives me session and by using this session i can post image on Twitter, but the problem is that after restart i am already logged in to my app via Twitter but session is not available. i have to log in again to get session. Native Twitter app is installed on my device i simply get the session of that user which is already logged in to Twitter app and my App via Twitter. is there any way to get this.

i am using this code to share bitmap image on Twitter

public void shareOnTwitter(Bitmap bitmap){
        final TwitterSession session = TwitterCore.getInstance().getSessionManager()
                .getActiveSession();
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        byte[] byteArray = bytes.toByteArray();
        Twitter.getInstance().getTwitterAuthConfig();
        if(session != null) {
            TwitterApiClient twitterApiClient = new TwitterApiClient(session);

            MediaType mediaType = MediaType.parse("image/*");
            RequestBody body = RequestBody.create(mediaType, byteArray);

            Call<Media> mediaCall = twitterApiClient.getMediaService().upload(body, null, null);
            mediaCall.enqueue(new Callback<Media>() {
                @Override
                public void success(Result<Media> result) {
                    String mediaIdString = result.data.mediaIdString;

                }

                @Override
                public void failure(TwitterException exception) {
                    AppUtil.log("Twitter", "Twitter media failed");
                }
            });
        }
    }

Note: i don't want to share image via intent as Link


Solution

  • You further need to call the following method from success method:

    void uploadTweetWithMedia(TwitterApiClient client, TwitterSession session, String text, String mediaId) { client.getStatusesService().update(text, null, null, null, null, null, null, true, mediaId) .enqueue( new Callback() { @Override public void success(Result result) { Log.v("update", "success " + result.data.idStr); }

                            @Override
                            public void failure(TwitterException exception) {
                                Log.v("update", "failure " + exception.getMessage());
                            }
                        });
    }