前面申请CONSUMER_KEY和CONSUMER_SECRET的过程就忽略了,这里直接上代码。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.twitter_demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- Network State Permissions --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.twitter_demo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="t4jsample" android:scheme="oauth" /> </intent-filter> </activity> </application> </manifest>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".TwitterHomeActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="106dp" android:layout_marginTop="21dp" android:text="@string/hello_world" android:textColor="#A52A2A" android:textStyle="bold" android:typeface="serif" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="80dp" android:text="Login to twitter" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:visibility="gone" android:ems="10" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText1" android:layout_centerHorizontal="true" android:layout_marginTop="34dp" android:visibility="gone" android:text="Tweets" /> </RelativeLayout>
AlertDialogManager.java
package com.example.twitter_demo; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; public class AlertDialogManager { public void showAlertDialog(Context context, String title, String message, Boolean status) { AlertDialog alertDialog = new AlertDialog.Builder(context).create(); // Setting Dialog Title alertDialog.setTitle(title); // Setting Dialog Message alertDialog.setMessage(message); if (status != null) // Setting alert dialog icon // alertDialog.setIcon((status) ? R.drawable.success : // R.drawable.fail); // Setting OK Button alertDialog.setButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); // Showing Alert Message alertDialog.show(); } }
ConnectionDetector.java
package com.example.twitter_demo; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.util.Log; public class ConnectionDetector { private Context _context; public ConnectionDetector(Context context) { this._context = context; } public boolean isConnectingToInternet() { ConnectivityManager connectivity = (ConnectivityManager) _context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { Log.d("Network", "NETWORKnAME: " + info[i].getTypeName()); return true; } } return false; } }
MainActivity.java
package com.example.twitter_demo; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.User; import twitter4j.auth.AccessToken; import twitter4j.auth.RequestToken; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.ActivityInfo; import android.text.Html; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends Activity { static String TWITTER_CONSUMER_KEY = "gWuDKEHVD4Ito3TKNaexmg"; static String TWITTER_CONSUMER_SECRET = "0DYm4kSSOnZ0iYmUojJPZOs0KppYivN9jiVnkba574"; static String PREFERENCE_NAME = "twitter_oauth"; static final String PREF_KEY_OAUTH_TOKEN = "oauth_token"; static final String PREF_KEY_OAUTH_SECRET = "oauth_token_secret"; static final String PREF_KEY_TWITTER_LOGIN = "isTwitterLogedIn"; static final String TWITTER_CALLBACK_URL = "oauth://t4jsample"; static final String URL_TWITTER_AUTH = "auth_url"; static final String URL_TWITTER_OAUTH_VERIFIER = "oauth_verifier"; static final String URL_TWITTER_OAUTH_TOKEN = "oauth_token"; ProgressDialog pDialog; private static Twitter twitter; private static RequestToken requestToken; private static SharedPreferences mSharedPreferences; private ConnectionDetector cd; AlertDialogManager alert = new AlertDialogManager(); EditText sts; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); cd = new ConnectionDetector(getApplicationContext()); if (!cd.isConnectingToInternet()) { alert.showAlertDialog(MainActivity.this, "Internet Connection Error", "Please connect to working Internet connection", false); return; } // Check if twitter keys are set if (TWITTER_CONSUMER_KEY.trim().length() == 0 || TWITTER_CONSUMER_SECRET.trim().length() == 0) { alert.showAlertDialog(MainActivity.this, "Twitter oAuth tokens", "Please set your twitter oauth tokens first!", false); return; } mSharedPreferences = getApplicationContext().getSharedPreferences( "MyPref", 0); findViewById(R.id.button1).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { loginToTwitter(); } }); findViewById(R.id.button2).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { sts = (EditText) findViewById(R.id.editText1); String status = sts.getText().toString(); if (status.trim().length() > 0) { new updateTwitterStatus().execute(status); } else { Toast.makeText(getApplicationContext(), "Please enter status message", Toast.LENGTH_SHORT).show(); } } }); if (!isTwitterLoggedInAlready()) { Uri uri = getIntent().getData(); if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { if (pDialog == null) { pDialog = new ProgressDialog(MainActivity.this); } pDialog.setMessage("Access Tiwtter..."); pDialog.show(); new AccessTwitter().execute(uri); } } else { findViewById(R.id.button1).setVisibility(View.GONE); findViewById(R.id.editText1).setVisibility(View.VISIBLE); findViewById(R.id.button2).setVisibility(View.VISIBLE); } } private ProgressDialog getProgressDialog() { ProgressDialog progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("login..."); progressDialog.setMessage("please wait..."); return progressDialog; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. return true; } private void loginToTwitter() { if (!isTwitterLoggedInAlready()) { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); Configuration configuration = builder.build(); TwitterFactory factory = new TwitterFactory(configuration); twitter = factory.getInstance(); new RequestTwitter().execute(); } else { Toast.makeText(getApplicationContext(), "Already Logged into twitter", Toast.LENGTH_LONG).show(); } } private class RequestTwitter extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { try { requestToken = twitter .getOAuthRequestToken(TWITTER_CALLBACK_URL); } catch (TwitterException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { if (requestToken != null) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(requestToken.getAuthenticationURL())); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); MainActivity.this.startActivity(intent); } else { Log.e("TAG", "requstToken error"); } super.onPostExecute(result); } } private class AccessTwitter extends AsyncTask<Uri, String, Boolean> { @Override protected Boolean doInBackground(Uri... params) { Uri uri = params[0]; if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) { String verifier = uri .getQueryParameter(URL_TWITTER_OAUTH_VERIFIER); try { AccessToken accessToken = twitter.getOAuthAccessToken( requestToken, verifier); // Shared Preferences Editor e = mSharedPreferences.edit(); e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()); e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret()); e.putBoolean(PREF_KEY_TWITTER_LOGIN, true); e.commit(); Log.e("Twitter OAuth Token", "> " + accessToken.getToken()); long userID = accessToken.getUserId(); User user = twitter.showUser(userID); String username = user.getName(); Log.e("UserID: ", "userID: " + userID + "" + username); Log.v("Welcome:", "Thanks:" + Html.fromHtml("<b>Welcome " + username + "</b>")); return true; } catch (Exception e) { Log.e("Twitter Login Error", "> " + e.getMessage(), e); } } return false; } @Override protected void onPostExecute(Boolean result) { pDialog.dismiss(); if (result) { findViewById(R.id.button1).setVisibility(View.GONE); findViewById(R.id.editText1).setVisibility(View.VISIBLE); findViewById(R.id.button2).setVisibility(View.VISIBLE); } else { Log.e("TAG", "accessToken error"); } super.onPostExecute(result); } } private boolean isTwitterLoggedInAlready() { return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false); } class updateTwitterStatus extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { super.onPreExecute(); if (pDialog == null) { pDialog = new ProgressDialog(MainActivity.this); } pDialog.setMessage("Updating to twitter..."); pDialog.setIndeterminate(false); pDialog.setCancelable(false); pDialog.show(); } protected String doInBackground(String... args) { Log.d("Tweet Text", "> " + args[0]); String status = args[0]; try { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.setOAuthConsumerKey(TWITTER_CONSUMER_KEY); builder.setOAuthConsumerSecret(TWITTER_CONSUMER_SECRET); // Access Token String access_token = mSharedPreferences.getString( PREF_KEY_OAUTH_TOKEN, ""); // Access Token Secret String access_token_secret = mSharedPreferences.getString( PREF_KEY_OAUTH_SECRET, ""); AccessToken accessToken = new AccessToken(access_token, access_token_secret); Twitter twitter = new TwitterFactory(builder.build()) .getInstance(accessToken); // Update status twitter4j.Status response = twitter.updateStatus(status); Log.d("Status", "> " + response.getText()); } catch (TwitterException e) { // Error in updating status Log.d("Twitter Update Error", e.getMessage()); } return null; } protected void onPostExecute(String file_url) { // dismiss the dialog after getting all products pDialog.dismiss(); // updating UI from Background Thread runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Status tweeted successfully", Toast.LENGTH_SHORT) .show(); // Clearing EditText field sts.setText(""); } }); } } }
相关推荐
故事相机 StoryCam v1.1 版本:1.1 软件语言:非中文 软件类别:特效相机 软件大小:18.65 MB 适用固件:2.2及更高固件 内置广告:没有广告 适用平台:Android StoryCam是微信国际版团队针对国际用户推出的相机...
《Apollo音乐播放器》是一款Android系统广受欢迎的音乐播放器,支持MP3,AAC,FLAC等。 软件特点: 支持按专辑、艺术家、流派来进行歌曲查找,播放列表可以发送到... 在Facebook和Twitter上分享当前收听的音乐。
除了在Android平台上应用Rx之外,他还热衷于开发面向开发者的工具,如广受欢迎的NSLogger。Florent在Twitter上的账号为@fpillet。 2. **Junior Bontognali**:自第一代iPhone发布以来便投身于iOS开发,是RxSwift...
5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...
LemonSMS 这个Java库可以让开发者在应用程序中集成使用GSM调制解调器或兼容电话来发送SMS消息。 远程桌面 Java Remote Desktop.tar Java Remote Desktop 是一个Java 的远程桌面软件,支持很多特性例如文件传输、...