从android上传Twitter上的媒体文件

时间:2013-07-29 07:56:46

标签: android twitter media twitter-oauth twitter4j

这是我的代码,在一点点搜索之后从twitter上传媒体文件,我终于让它运行我在这里发帖,这样任何人都想做同样的工作,这样他/她可以节省时间:) / p>

这是我的主要布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <!-- Twitter Login Button -->
    <Button android:id="@+id/btnLoginTwitter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Login with Twitter"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="30dip"/>

    <!-- user name label -->
    <TextView android:id="@+id/lblUserName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dip"
        android:layout_marginTop="30dip"/>

    <!-- label update status -->
    <TextView android:id="@+id/lblUpdate"
        android:text="Update Status"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:visibility="gone"/>

    <!-- Tweet EditText -->
    <EditText android:id="@+id/txtUpdateStatus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dip"
        android:visibility="gone"/>

    <!-- Tweet Button -->
    <Button android:id="@+id/btnUpdateStatus"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Tweet"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:visibility="gone"/>


     <Button android:id="@+id/btnUploadVideo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Upload Video"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="50dip"
        android:visibility="gone"/>

    <!-- Twitter Logout button -->
    <Button android:id="@+id/btnLogoutTwitter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Logout from Twitter"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginTop="50dip"
        android:visibility="gone"/>



</LinearLayout>

为了在您的应用程序中实现twitter oAuth,您需要用于进行Twitter API调用的Twitter消费者密钥和消费者密钥。因此,注册一个新的Twitter应用程序并获取密钥

  1. 转到https://dev.twitter.com/apps/new并注册新申请。填写申请表名称,说明和网站。
  2. 在回调网址字段中添加一些虚拟网址,使该应用成为浏览器应用。 (如果您将其保留为空白,则它将充当桌面应用程序,在移动设备中无效)

  3. 在设置标签上传图标下,将访问类型更改为“读取和写入”。

  4. 在Eclipse FileNew⇒Android⇒ApplicationProject中创建一个新项目并填写所需的详细信息。 创建项目后打开AndroidManifest.xml文件并粘贴以下代码。我将以下代码添加到清单文件

    • INTERNET权限
    • ACCESS_NETWORK_STATE权限
    • 并添加了一个Intent Filter

                                                                                    

  5. 以下是代码: -

    public class MainActivity extends Activity {
    
    
        static String TWITTER_CONSUMER_KEY = "Your Key";
        static String TWITTER_CONSUMER_SECRET = "Your KEY";
    
     // Preference Constants
        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";
    
        // Twitter oauth urls
        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";
    
        // Login button
        Button btnLoginTwitter;
        // Update status button
        Button btnUpdateStatus;
        // Logout button
        Button btnLogoutTwitter;
        // EditText for update
    
        EditText txtUpdate;
        // lbl update
        TextView lblUpdate;
        TextView lblUserName;
    
        // Progress dialog
        ProgressDialog pDialog;
        Twitter twitte;
        // Twitter
        private static Twitter twitter;
        private static RequestToken requestToken;
         File file;
        // Shared Preferences
        private static SharedPreferences mSharedPreferences;
    
        // Internet Connection detector
        private ConnectionDetector cd;
    
        // Alert Dialog Manager
        AlertDialogManager alert = new AlertDialogManager();
    
    
    
        @SuppressLint("NewApi")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
               StrictMode.setThreadPolicy(policy);
            setContentView(R.layout.activity_main);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            cd = new ConnectionDetector(getApplicationContext());
    
             if (!cd.isConnectingToInternet()) {
                    // Internet Connection is not present
                    alert.showAlertDialog(MainActivity.this, "Internet Connection Error",
                            "Please connect to working Internet connection", false);
                    // stop executing code by return
                    return;
                }
    
             if(TWITTER_CONSUMER_KEY.trim().length() == 0 || TWITTER_CONSUMER_SECRET.trim().length() == 0){
                    // Internet Connection is not present
                    alert.showAlertDialog(MainActivity.this, "Twitter oAuth tokens", "Please set your twitter oauth tokens first!", false);
                    // stop executing code by return
                    return;
                }
    
             btnLoginTwitter = (Button) findViewById(R.id.btnLoginTwitter);
                btnUpdateStatus = (Button) findViewById(R.id.btnUpdateStatus);
                btnLogoutTwitter = (Button) findViewById(R.id.btnLogoutTwitter);
                txtUpdate = (EditText) findViewById(R.id.txtUpdateStatus);
                lblUpdate = (TextView) findViewById(R.id.lblUpdate);
                lblUserName = (TextView) findViewById(R.id.lblUserName);
    
                // Shared Preferences
                mSharedPreferences = getApplicationContext().getSharedPreferences(
                        "MyPref", 0);
    
    
                btnLoginTwitter.setOnClickListener(new View.OnClickListener() {
    
                    @Override
                    public void onClick(View arg0) {
                        // Call login twitter function
                        loginToTwitter();
                    }
                });
    
    
                if (!isTwitterLoggedInAlready()) {
                    Uri uri = getIntent().getData();
                    if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK_URL)) {
                        // oAuth verifier
                        String verifier = uri
                                .getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);
    
                        try {
                            // Get the access token
                            AccessToken accessToken = twitter.getOAuthAccessToken(
                                    requestToken, verifier);
    
                            // Shared Preferences
                            Editor e = mSharedPreferences.edit();
    
                            // After getting access token, access token secret
                            // store them in application preferences
                            e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
                            e.putString(PREF_KEY_OAUTH_SECRET,
                                    accessToken.getTokenSecret());
                            // Store login status - true
                            e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
                            e.commit(); // save changes
    
                            Log.e("Twitter OAuth Token", "> " + accessToken.getToken());
    
                            // Hide login button
                            btnLoginTwitter.setVisibility(View.GONE);
    
                            // Show Update Twitter
                            lblUpdate.setVisibility(View.VISIBLE);
                            txtUpdate.setVisibility(View.VISIBLE);
                            btnUpdateStatus.setVisibility(View.VISIBLE);
                            btnLogoutTwitter.setVisibility(View.VISIBLE);
    
                            // Getting user details from twitter
                            // For now i am getting his name only
                            long userID = accessToken.getUserId();
                            User user = twitter.showUser(userID);
                            String username = user.getName();
    
                            // Displaying in xml ui
                            lblUserName.setText(Html.fromHtml("<b>Welcome " + username + "</b>"));
                        } catch (Exception e) {
                            // Check log for login errors
                            Log.e("Twitter Login Error", "> " + e.getMessage());
                        }
                    }
                }
    
    
    
    
                btnUpdateStatus.setOnClickListener(new View.OnClickListener() {
    
                    @Override
                    public void onClick(View v) {
                        // Call update status function
                        // Get the status from EditText
                        String status = txtUpdate.getText().toString();
    
                        // Check for blank text
                        if (status.trim().length() > 0) {
                            // update status
                            new updateTwitterStatus().execute(status);
                        } else {
                            // EditText is empty
                            Toast.makeText(getApplicationContext(),
                                    "Please enter status message", Toast.LENGTH_SHORT)
                                    .show();
    
                        }
                    }
                });
    
    
                btnLogoutTwitter.setOnClickListener(new View.OnClickListener() {
    
                    @Override
                    public void onClick(View arg0) {
                        // Call logout twitter function
                        logoutFromTwitter();
                    }
                });
    
    
    
    
        }
    
    
    
        private void logoutFromTwitter() {
            // Clear the shared preferences
            Editor e = mSharedPreferences.edit();
            e.remove(PREF_KEY_OAUTH_TOKEN);
            e.remove(PREF_KEY_OAUTH_SECRET);
            e.remove(PREF_KEY_TWITTER_LOGIN);
            e.commit();
    
            // After this take the appropriate action
            // I am showing the hiding/showing buttons again
            // You might not needed this code
            btnLogoutTwitter.setVisibility(View.GONE);
            btnUpdateStatus.setVisibility(View.GONE);
            txtUpdate.setVisibility(View.GONE);
            lblUpdate.setVisibility(View.GONE);
            lblUserName.setText("");
            lblUserName.setVisibility(View.GONE);
            btnLoginTwitter.setVisibility(View.VISIBLE);
        }
    
        private void loginToTwitter() {
            // Check if already logged in
            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();
    
                try {
                    requestToken = twitter
                            .getOAuthRequestToken(TWITTER_CALLBACK_URL);
                    this.startActivity(new Intent(Intent.ACTION_VIEW, Uri
                            .parse(requestToken.getAuthenticationURL())));
                } catch (TwitterException e) {
                    e.printStackTrace();
                }
            } else {
                // user already logged into twitter
                Toast.makeText(getApplicationContext(),
                        "Already Logged into twitter", Toast.LENGTH_LONG).show();
                btnLoginTwitter.setVisibility(View.GONE);
    
                // Show Update Twitter
                lblUpdate.setVisibility(View.VISIBLE);
                txtUpdate.setVisibility(View.VISIBLE);
                btnUpdateStatus.setVisibility(View.VISIBLE);
                btnLogoutTwitter.setVisibility(View.VISIBLE);
                btnuploadvideo.setVisibility(View.VISIBLE);
            }
        }
    
        /**
         * Check user already logged in your application using twitter Login flag is
         * fetched from Shared Preferences
         * */
        private boolean isTwitterLoggedInAlready() {
            // return twitter login status from Shared Preferences
            return mSharedPreferences.getBoolean(PREF_KEY_TWITTER_LOGIN, false);
        }
    
    
    
    
        /**
         * Function to update status
         * */
        class updateTwitterStatus extends AsyncTask<String, String, String> {
    
            /**
             * Before starting background thread Show Progress Dialog
             * */
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                pDialog = new ProgressDialog(MainActivity.this);
                pDialog.setMessage("Updating to twitter...");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            }
    
            /**
             * getting Places JSON
             * */
            protected String doInBackground(String... args) {
                Log.d("Tweet Text", "> " + args[0]);
                String status = args[0];
                file=new File("/mnt/sdcard/1.mp4");
                    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);
    
    
                    try {
                        uploadPic(file, status, twitter);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                   // Log.d("Status", "> " + response.getText());
    
                return null;
            }
    
            /**
             * After completing background task Dismiss the progress dialog and show
             * the data in UI Always use runOnUiThread(new Runnable()) to update UI
             * from background thread, otherwise you will get error
             * **/
            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
                        txtUpdate.setText("");
                    }
                });
            }
    
        }
    
        public void uploadPic(File file, String message, Twitter twitter)
                throws Exception {
            try {
                StatusUpdate status = new StatusUpdate(message);
                status.setMedia(file);
                Status state = twitter.updateStatus(status);
    
                Log.d("Responce", state.getText());
    
            } catch (TwitterException e) {
                e.printStackTrace();
                Log.d("TAG", "Pic Upload error" + e.getErrorMessage());
                // throw e;
            }
    
            Log.d("Responce","failed");
        }
    

    ConnectionDetector.Java

    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)
                          {
                              return true;
                          }
    
              }
              return false;
        }
    
    
    }
    

    AlertDialogManager.java

    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();
        }
    
    }
    

0 个答案:

没有答案