Android launch Twitter intent

前端 未结 3 560
生来不讨喜
生来不讨喜 2020-12-15 19:03

I used below code for launching Twitter through intent but it\'s not working. I have twitter app installed on my phone.

Intent shareIntent = new Intent(andro         


        
相关标签:
3条回答
  • 2020-12-15 19:06

    Slightly corrected (thanks to Taranfx) an user's feed intent (change user_id=>screen_name):

        public static void startTwitter(Context context) {
    
        Intent intent = null;
        try {
            // get the Twitter app if possible
            context.getPackageManager().getPackageInfo("com.twitter.android", 0);
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("twitter://user?screen_name=<place_user_name_here>"));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            return intent;
        } catch (Exception e) {
            // no Twitter app, revert to browser
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/<place_user_name_here>"));
        }
        startActivity(intent);
    }
    
    0 讨论(0)
  • 2020-12-15 19:16

    I was using the com.twitter.android.composer.ComposerActivity to post text and images since 2016. But started to receive crash reports from users some time ago:

    Fatal Exception: android.content.ActivityNotFoundException Unable to find explicit activity class {com.twitter.android/com.twitter.android.composer.ComposerActivity}; have you declared this activity in your AndroidManifest.xml?

    The issue was caused by renaming
    com.twitter.android.composer.ComposerActivity
    to
    com.twitter.composer.ComposerActivity
    inside Twitter app.

    The issue was resolved since I changed activity name to com.twitter.composer.ComposerActivity.

    And I use the following code to post images with text to Twitter:

    ShareCompat.IntentBuilder.from(activity)
        .setText(getTextToShare())
        .setStream(getImageUriToShare())
        .setType("image/png")
        .getIntent().addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
        .setClassName("com.twitter.android", "com.twitter.composer.ComposerActivity");
    
    0 讨论(0)
  • 2020-12-15 19:25

    Typically for launching a user's feed

    Intent intent = null;
    try {
        // get the Twitter app if possible
        this.getPackageManager().getPackageInfo("com.twitter.android", 0);
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("twitter://user?screen_name=USERID"));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    } catch (Exception e) {
        // no Twitter app, revert to browser
        intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/USERID_OR_PROFILENAME"));
    }
    this.startActivity(intent);
    

    For Post Intent

    Intent tweetIntent = new Intent(Intent.ACTION_SEND);
    tweetIntent.putExtra(Intent.EXTRA_TEXT, "This is a Test.");
    tweetIntent.setType("text/plain");
    
    PackageManager packManager = getPackageManager();
    List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(tweetIntent,  PackageManager.MATCH_DEFAULT_ONLY);
    
    boolean resolved = false;
    for(ResolveInfo resolveInfo: resolvedInfoList){
        if(resolveInfo.activityInfo.packageName.startsWith("com.twitter.android")){
            tweetIntent.setClassName(
                resolveInfo.activityInfo.packageName, 
                resolveInfo.activityInfo.name );
            resolved = true;
            break;
        }
    }
    if(resolved){
        startActivity(tweetIntent);
    }else{
        Toast.makeText(this, "Twitter app isn't found", Toast.LENGTH_LONG).show();
    }
    
    0 讨论(0)
提交回复
热议问题