2014-01-13 22 views
13

Ich verwende den folgenden Code zum Starten von Twitter Absicht, funktioniert aber nicht. Ich habe die Twitter App auf meinem Handy installiert. Brauche Hilfe!Android startet Twitter Intent

 Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); 
     shareIntent.setType("text/plain"); 
     shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share"); 
     PackageManager pm = contexto.getPackageManager(); 
     List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0); 
     for (final ResolveInfo app : activityList) { 
      if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) { 
       final ActivityInfo activity = app.activityInfo; 
       final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name); 
       shareIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
       shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
       shareIntent.setComponent(name); 
       contexto.startActivity(shareIntent); 
       break; 
      } 
     } 

Erste Ausnahme, wenn ich versuche, um die Aktivität zu nennen:

 android.content.ActivityNotFoundException: Unable to find explicit activity class {com.twitter.android/com.twitter.android.PostActivity}; have you declared this activity in your AndroidManifest.xml? 
+0

Sie bekommen einen Fehler/Ausnahme? Versuchen Sie, Ihren Code in try catch zu setzen und nach Fehlern zu suchen. – Dev01

+0

android.content.ActivityNotFoundException: Die explizite Aktivitätsklasse konnte nicht gefunden werden {com.twitter.android/com.twitter.android.PostActivity}; Hast du diese Aktivität in deiner AndroidManifest.xml deklariert? MUSS ICH ETWAS IM ANDROID MANIFEST VERBINDEN ??? – user3065901

Antwort

43

Typischerweise

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?user_id=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); 

für 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(); 
} 
+1

+1 nette Idee ..... – Dev01

+0

Danke Mann. Das hat funktioniert (mit ein wenig zwicken) – TheOnlyAnil

4

leicht korrigiert einen Benutzer Futter für den Start (Danke an Taranfx) eine Verwendung r Feed Intent (Änderung 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); 
}