Twitter Android应用程序(至少)有两个intent-filters。一个用于推文,一个用于直接消息。
如果您想通过Twitter(来自其他应用)分享内容,您通常会看到隐藏意图列表中列出的两个项目(如下面的第一张图片所示)。
当您想要从Twitter应用程序分享内容时,您会获得相同的意图,但只有一个选项(指示消息)。其他选项以某种方式被删除。请参阅第二张图片以供参考。
我的问题是,Twitter应用程序如何做到这一点?
我相信他们会查询可以处理内容的应用并从中删除自己的意图(推文)并在自定义BottomSheet中显示结果。我相信是这种情况,因为BottomSheet的退出动画与其他应用程序的标准Share BottomSheet动画略有不同。
如果它不是自定义的,是否有另一种方法可以在您自己的应用中过滤您自己的意图?
答案 0 :(得分:0)
尝试使用此功能,通过您希望在对话框中显示的应用进行分享
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);
}
}
}