2016-03-30 11 views
2

Die Twitter Android App hat (mindestens) zwei Intent-Filter. Eine für Tweets und eine für direkte Nachrichten.Eigene implizite Absicht ausblenden aus der Freigabeliste

Wenn Sie etwas über Twitter (von einer anderen App) teilen möchten, sehen Sie normalerweise beide Elemente in der impliziten Liste (wie im ersten Bild unten).

Sharing to Twitter from another app, e.g. Chrome

Wenn Sie etwas von der Twitter-App teilen möchten, erhalten Sie die gleiche Absicht, aber mit nur einer Option (direkte Meldung). Die anderen Optionen sind irgendwie entfernt. Sehen Sie sich das zweite Bild als Referenz an.

Sharing from Twitter

Meine Fragen ist, wie funktioniert die Twitter-App dies tun?

Ich glaube, dass sie die Apps abfragen, die mit dem Inhalt umgehen und ihre eigene Absicht (Tweet) von dort entfernen und die Ergebnisse in einem benutzerdefinierten BottomSheet anzeigen können. Ich glaube, das ist der Fall, weil die Exit-Animation des BottomSheets ein wenig anders ist als die standardmäßige Share BottomSheet-Animation anderer Apps.

Wenn es nicht benutzerdefiniert ist, gibt es eine andere Möglichkeit, eigene Absichten in Ihrer eigenen App zu filtern?

Antwort

0

versuchen diese für die gemeinsame Nutzung durch Anwendungen, die Sie sehr viel in Dialog

public void onShareClick(View v){ 
List<Intent> targetShareIntents=new ArrayList<Intent>(); 
Intent shareIntent=new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.setType("text/plain"); 
List<ResolveInfo> resInfos=getPackageManager().queryIntentActivities(shareIntent, 0); 
if(!resInfos.isEmpty()){ 
    System.out.println("Have package"); 
    for(ResolveInfo resInfo : resInfos){ 
     String packageName=resInfo.activityInfo.packageName; 
     Log.i("Package Name", packageName); 
     if(packageName.contains("com.twitter.android") || packageName.contains("com.facebook.katana") || packageName.contains("com.kakao.story")){ 
      Intent intent=new Intent(); 
      intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name)); 
      intent.setAction(Intent.ACTION_SEND); 
      intent.setType("text/plain"); 
      intent.putExtra(Intent.EXTRA_TEXT, "Text"); 
      intent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
      intent.setPackage(packageName); 
      targetShareIntents.add(intent); 
     } 
    } 
    if(!targetShareIntents.isEmpty()){ 
     System.out.println("Have Intent"); 
     Intent chooserIntent=Intent.createChooser(targetShareIntents.remove(0), "Choose app to share"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetShareIntents.toArray(new Parcelable[]{})); 
     startActivity(chooserIntent); 
    }else{ 
     System.out.println("Do not Have Intent"); 
     showDialaog(this); 
    } 
} 
} 
+0

Sie zeigen möchten Danke, aber das die Frage nicht beantworten. Ich kenne diesen Weg, und ich weiß, dass ich manuell filtern kann, aber meine Frage ist, ob es einen anderen Weg gibt oder tut Twitter es auch so. – peshkira

+0

könnte es andere Wege geben, aber ich denke, Twitter Jungs tun manuell. – Nitesh

+0

Was wissen Sie sonst noch? Warum denkst du, Twitter macht es manuell? – peshkira

Verwandte Themen