Basic Code for Twitter oAuth for Android works with any version of Android I have tested it against – will crash if no Internet access but adding a check for this is relevantly simple (wanted to keep the code just about the oAuth process – the core idea and code comes from this blogpost
AndroidBasicOAuthActivity Code
package me.crowleydavid.android.basicoauth;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class AndroidBasicOAuthActivity extends Activity {
private int TWITTER_AUTH;
private Twitter mTwitter;
private RequestToken mRequestToken;
private String accessToken;
private String accessTokenSecret;
private boolean haveConnectedWifi;
private boolean haveConnectedMobile;
private double x;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
accessToken = settings.getString( "twitter_access_token", null );
accessTokenSecret = settings.getString( "twitter_access_token_secret", null );
Button tweetB = (Button) findViewById(R.id.tweet_button);
tweetB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
updateStatus();
}
});
}
private boolean haveNetworkConnection() {
haveConnectedWifi = false;
haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
// private void updateStatusLoggedIn() {
// SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
// accessToken = settings.getString( "twitter_access_token", null );
// accessTokenSecret = settings.getString( "twitter_access_token_secret", null );
//
// // String s2 = String.valueOf(i);
// // Toast.makeText(this, s2, 10000).show();
// ConfigurationBuilder builder = new ConfigurationBuilder();
// builder.setOAuthConsumerKey(Constants.CONSUMER_KEY);
// builder.setOAuthConsumerSecret(Constants.CONSUMER_SECRET);
// builder.setOAuthAccessToken(accessToken);
// builder.setOAuthAccessTokenSecret(accessTokenSecret);
// Configuration conf = builder.build();
// Twitter t = new TwitterFactory(conf).getInstance();
// i++;
// try {
// if(i<10){
// t.updateStatus( "Loggedin" + i);
// }
// }
// catch (TwitterException e) {
// e.printStackTrace();
// }
//
// }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (requestCode == TWITTER_AUTH)
{
if (resultCode == Activity.RESULT_OK)
{
Toast.makeText(this, "Hey Ho", 300).show();
String oauthVerifier = (String) data.getExtras().get("oauth_verifier");
AccessToken at = null;
try
{
// Pair up our request with the response
at = mTwitter.getOAuthAccessToken(oauthVerifier);
String theToken = at.getToken();
// Toast.makeText(this, theToken, 10000).show();
String theTokenSecret = at.getTokenSecret();
// Toast.makeText(this, theTokenSecret, 10000).show();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
settings = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = settings.edit();
editor.putString("twitter_access_token",theToken);
editor.putString("twitter_access_token_secret", theTokenSecret);
editor.commit();
// his method
// settings.edit()
// .putString( "twitter_access_token", at.getToken() )
// .putString( "twitter_access_token_secret", at.getTokenSecret() )
// .commit();
// Intent i = new Intent(this, someclass.class);
// startActivity(i);
updateStatus();
}
catch (TwitterException e)
{
e.printStackTrace();
}
}
}
else
{
Toast.makeText(this, "uh oh, Spaghetti Os", 300).show();
}
}
private void updateStatus() {
// TODO Auto-generated method stub
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
accessToken = settings.getString( "twitter_access_token", null );
accessTokenSecret = settings.getString( "twitter_access_token_secret", null );
// Toast.makeText(this, accessToken, 10000).show();
// Toast.makeText(this, accessTokenSecret, 10000).show();
haveNetworkConnection();
if ((haveConnectedWifi)|| (haveConnectedMobile)){
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(Constants.CONSUMER_KEY);
builder.setOAuthConsumerSecret(Constants.CONSUMER_SECRET);
builder.setOAuthAccessToken(accessToken);
builder.setOAuthAccessTokenSecret(accessTokenSecret);
Configuration conf = builder.build();
Twitter t = new TwitterFactory(conf).getInstance();
try {
x = Math.random();
t.updateStatus( "Yo ho ho and a bottle of rum " + x);
}
catch (TwitterException e) {
e.printStackTrace();
}
}
else{
Toast.makeText(this, "No access to Internet..please try again", 3000).show();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
accessToken = settings.getString( "twitter_access_token", null );
accessTokenSecret = settings.getString( "twitter_access_token_secret", null );
haveNetworkConnection();
if ((haveConnectedWifi)|| (haveConnectedMobile)){
// Toast.makeText(this, "Internet is go!", 3000).show();
// Intent i = new Intent(this, AndroidBasicOAuthActivity.class);
// startActivity(i);
if ((accessToken==null)||(accessTokenSecret==null)){
mTwitter = new TwitterFactory().getInstance();
mRequestToken = null;
mTwitter.setOAuthConsumer(Constants.CONSUMER_KEY,Constants.CONSUMER_SECRET );
String callbackURL = getResources().getString(R.string.twitter_callback);
try
{
mRequestToken = mTwitter.getOAuthRequestToken(callbackURL);
}
catch (TwitterException e)
{
e.printStackTrace();
}
Intent i = new Intent(this, TwitterWebviewActivity.class);
i.putExtra("URL", mRequestToken.getAuthenticationURL());
startActivityForResult(i, TWITTER_AUTH);
}
else{
Toast.makeText(this, "Token found..logged in", 3000).show();
// updateStatusLoggedIn();
}
}
else{
Toast.makeText(this, "No access to Internet..please try again", 3000).show();
Intent i = new Intent(this, CheckNetAccess.class);
startActivity(i);
}
}
}
Constants Code you need to enter your own Twitter Developer keys here
package me.crowleydavid.android.basicoauth;
public class Constants {
public static final String CONSUMER_KEY = "************";
public static final String CONSUMER_SECRET= "**************";
TwitterWebviewActivity Code
package me.crowleydavid.android.basicoauth;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class TwitterWebviewActivity extends Activity {
private Intent mIntent;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.twitter_webview);
mIntent = getIntent();
String url = (String)mIntent.getExtras().get("URL");
WebView webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient( new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if( url.contains(getResources().getString( R.string.twitter_callback )))
{
Uri uri = Uri.parse( url );
String oauthVerifier = uri.getQueryParameter( "oauth_verifier" );
mIntent.putExtra( "oauth_verifier", oauthVerifier );
setResult( RESULT_OK, mIntent );
finish();
return true;
}
return false;
}
});
webView.loadUrl(url);
}
}
}
CheckNetAccess Code
package me.crowleydavid.android.basicoauth;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class CheckNetAccess extends Activity {
private boolean haveConnectedWifi;
private boolean haveConnectedMobile;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.checknet);
Button netB = (Button) findViewById(R.id.netbutton);
netB.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
haveNetworkConnection();
if ((haveConnectedWifi)|| (haveConnectedMobile)){
Toast.makeText(CheckNetAccess.this, "Internet is go!", 3000).show();
Intent i = new Intent(CheckNetAccess.this, AndroidBasicOAuthActivity.class);
startActivity(i);
}
else{
Toast.makeText(CheckNetAccess.this, "No access to Internet..please try again", 3000).show();
}
}
});
}
private boolean haveNetworkConnection() {
haveConnectedWifi = false;
haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
}
}
Android Manifest needs these permissions
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
AndroidBasicOAuth