You can try this ...
MainActivity.java
private static final String twitter_consumer_key = "Consumer key"; private static final String twitter_secret_key = "secret key"; TwitterApp mTwitter; protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap bitmap; // your image bitmap try{ mTwitter = new TwitterApp(this, twitter_consumer_key, twitter_secret_key); }catch (Exception e) { } upload_to_twitter.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mTwitter.setListener(mTwLoginDialogListener); mTwitter.resetAccessToken(); if (mTwitter.hasAccessToken() == true) { try { mTwitter.uploadPic(bitmap, "This is new pic"); postAsToast(FROM.TWITTER_POST, MESSAGE.SUCCESS); } catch (Exception e) { if (e.getMessage().toString().contains("duplicate")) { postAsToast(FROM.TWITTER_POST, MESSAGE.DUPLICATE); } e.printStackTrace(); } mTwitter.resetAccessToken(); } else { mTwitter.authorize(); } } }); } }
TwitterApp.java
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLDecoder; import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; import oauth.signpost.commonshttp.CommonsHttpOAuthProvider; import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.User; import twitter4j.auth.AccessToken; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.os.Handler; import android.os.Message; import android.view.Window; import android.widget.Toast; public class TwitterApp { private Twitter mTwitter; private TwitterSession mSession; private AccessToken mAccessToken; private CommonsHttpOAuthConsumer mHttpOauthConsumer; private CommonsHttpOAuthProvider mHttpOauthprovider; private String mConsumerKey; private String mSecretKey; private ProgressDialog mProgressDlg; private TwDialogListener mListener; private Activity context; public static final String OAUTH_CALLBACK_SCHEME = "x-oauthflow-twitter"; public static final String OAUTH_CALLBACK_HOST = "callback"; public static final String CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;
TwitterDialog.java
import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.Display; import android.view.ViewGroup; import android.view.Window; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; public class TwitterDialog extends Dialog { static final float[] DIMENSIONS_LANDSCAPE = { 500, 300 }; static final float[] DIMENSIONS_PORTRAIT = { 300, 500 }; static final FrameLayout.LayoutParams FILL = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); static final int MARGIN = 4; static final int PADDING = 2; private String mUrl; private TwitterApp.TwDialogListener mListener; private ProgressDialog mSpinner; private WebView mWebView; private LinearLayout mContent; private TextView mTitle; private boolean progressDialogRunning = false; public TwitterDialog(Context context, String url,TwitterApp.TwDialogListener listener) { super(context); mUrl = url; mListener = listener; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSpinner = new ProgressDialog(getContext()); mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE); mSpinner.setMessage("Loading..."); mContent = new LinearLayout(getContext()); mContent.setOrientation(LinearLayout.VERTICAL); setUpTitle(); setUpWebView(); Display display = getWindow().getWindowManager().getDefaultDisplay(); final float scale = getContext().getResources().getDisplayMetrics().density; float[] dimensions = (display.getWidth() < display.getHeight()) ? DIMENSIONS_PORTRAIT : DIMENSIONS_LANDSCAPE; addContentView(mContent, new FrameLayout.LayoutParams( (int) (dimensions[0] * scale + 0.5f), (int) (dimensions[1] * scale + 0.5f))); } private void setUpTitle() { requestWindowFeature(Window.FEATURE_NO_TITLE); Drawable icon = getContext().getResources().getDrawable( R.drawable.ic_launcher); mTitle = new TextView(getContext()); mTitle.setText("Twitter"); mTitle.setTextColor(Color.WHITE); mTitle.setTypeface(Typeface.DEFAULT_BOLD); mTitle.setBackgroundColor(0xFFbbd7e9); mTitle.setPadding(MARGIN + PADDING, MARGIN, MARGIN, MARGIN); mTitle.setCompoundDrawablePadding(MARGIN + PADDING); mTitle.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); mContent.addView(mTitle); } private void setUpWebView() { mWebView = new WebView(getContext()); mWebView.setVerticalScrollBarEnabled(false); mWebView.setHorizontalScrollBarEnabled(false); mWebView.setWebViewClient(new TwitterWebViewClient()); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl(mUrl); mWebView.setLayoutParams(FILL); mContent.addView(mWebView); } private class TwitterWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith(TwitterApp.CALLBACK_URL)) { mListener.onComplete(url); TwitterDialog.this.dismiss(); return true; } else if (url.startsWith("authorize")) { return false; } return true; } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); mListener.onError(description); TwitterDialog.this.dismiss(); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); mSpinner.show(); progressDialogRunning = true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); String title = mWebView.getTitle(); if (title != null && title.length() > 0) { mTitle.setText(title); } progressDialogRunning = false; mSpinner.dismiss(); } } @Override protected void onStop() { progressDialogRunning = false; super.onStop(); } public void onBackPressed() { if(!progressDialogRunning){ TwitterDialog.this.dismiss(); } } }
TwitterSession.java
import twitter4j.auth.AccessToken; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.Context; public class TwitterSession { private SharedPreferences sharedPref; private Editor editor; private static final String TWEET_AUTH_KEY = ""; private static final String TWEET_AUTH_SECRET_KEY = ""; private static final String TWEET_USER_NAME = ""; private static final String SHARED = "Twitter_Preferences"; public TwitterSession(Context context) { sharedPref = context.getSharedPreferences(SHARED, Context.MODE_PRIVATE); editor = sharedPref.edit(); } public void storeAccessToken(AccessToken accessToken, String username) { editor.putString(TWEET_AUTH_KEY, accessToken.getToken()); editor.putString(TWEET_AUTH_SECRET_KEY, accessToken.getTokenSecret()); editor.putString(TWEET_USER_NAME, username); editor.commit(); } public void resetAccessToken() { editor.putString(TWEET_AUTH_KEY, null); editor.putString(TWEET_AUTH_SECRET_KEY, null); editor.putString(TWEET_USER_NAME, null); editor.commit(); } public String getUsername() { return sharedPref.getString(TWEET_USER_NAME, ""); } public AccessToken getAccessToken() { String token = sharedPref.getString(TWEET_AUTH_KEY, null); String tokenSecret = sharedPref.getString(TWEET_AUTH_SECRET_KEY, null); if (token != null && tokenSecret != null) return new AccessToken(token, tokenSecret); else return null; }
}
The jar file used for this.
Pointer-kernel-1.2.1.2.jar
Pointer-commonshttp4-1.2.1.1.jar
twitter4j-core-3.0.3.jar
twitter4j-media-support-3.0.3.jar
This code is very useful, and I only shared the image on Twitter with this code.
Accept the answer if it proves useful .. thanks