2016-06-06 23 views
0

Ich versuche, einige Daten nur über Facebook, Twitter und g + zu teilen, damit ich eine benutzerdefinierte Liste der Absicht erstellen und ich kann Text senden, alles funktioniert gut. Aber ich habe ein Anzeigeproblem mit twitter unter enter image description hereGemeinsame Nutzung von Daten mit benutzerdefinierten Liste der Absicht ein Android-System

Sie sehen diese Systeme Android sehen, und wenn ich darauf klicke, ich habe dies: enter image description here

den Code Siehe:

In dieser erste Funktion ich, ich würde nur das Paket geschnürt wie

private List<String> getShareApplication(){ 
    List<String> mList=new ArrayList<>(); 
    mList.add("com.facebook.katana"); 
    mList.add("com.google.android.apps.plus"); 
    mList.add("com.twitter.android"); 
    return mList; 
} 

Und in dieser eine verwende ich nur über die Liste bin mit, ich sehe in der Schleife, wenn das Paket auf meinem Handy vorhanden ist, ich eine Absicht Aufruf targetedShare mit einem ACTION_SEND erstellen und einen Text in ihn setzen, und schließlich die Liste der targetedShareIntents hinzufügen

private void Share(List<String> PackageName) { 
      List<Intent> targetedShareIntents = new ArrayList<>(); 
      Intent share = new Intent(android.content.Intent.ACTION_SEND); 
      share.setType("text/plain"); 
      List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(share, 0); 
      if (!resInfo.isEmpty()){ 
       for (ResolveInfo info : resInfo) { 
        Intent targetedShare = new Intent(android.content.Intent.ACTION_SEND); 
        if (PackageName.contains(info.activityInfo.packageName.toLowerCase())) { 
         targetedShare.setType("text/plain"); 
         targetedShare.putExtra(Intent.EXTRA_TEXT, String.valueOf(urlJson)); 
         targetedShare.setPackage(info.activityInfo.packageName.toLowerCase()); 
         targetedShareIntents.add(targetedShare); 
        } 
       } 
       Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Share"); 
       chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[targetedShareIntents.size()])); 
       startActivity(chooserIntent); 
      } 
     } 
    } 

Ich versuche, einen anderen Code auf Stackoverflow gefunden zu verwenden und ich versuche, mit einem anderen Gerät, und ich versuche einen anderen twitter Paketnamen zu verwenden, wie:

com.twitter.android.composer.ComposerActivity

com.twitter.android.DMActivity

com.twitter .android.PostAc vität

etc ...

aber ich habe immer noch dieses Problem

Antwort

0

ich die Lösung gefunden, wenn jemand dieses Problem haben, können Sie twitter separat in der Intent-Liste mit dieser Funktion hinzufügen müssen:

public Intent findTwitterClient() { 
    final String[] twitterApps = { 
      "com.twitter.android", 
      "com.twidroid", 
      "com.handmark.tweetcaster", 
      "com.thedeck.android" }; 
    Intent tweetIntent = new Intent(); 
    tweetIntent.setType("text/plain"); 
    final PackageManager packageManager = getPackageManager(); 
    List<ResolveInfo> list = packageManager.queryIntentActivities(
      tweetIntent, PackageManager.MATCH_DEFAULT_ONLY); 
    for (int i = 0; i < twitterApps.length; i++) { 
     for (ResolveInfo resolveInfo : list) { 
      String p = resolveInfo.activityInfo.packageName; 
      if (p != null && p.startsWith(twitterApps[i])) { 
       tweetIntent.setPackage(p); 
       return tweetIntent; 
      } 
     } 
    } 
    return null; 
} 

Und Sie können es wie folgt verwenden: targedShareIntents.add (findTwitterClient());