[英]Hide own implicit Intent from share list
Twitter Android应用程序具有(至少)两个意图过滤器。 一种是发推文,一种是直接发短信。
当您想通过Twitter(从另一个应用程序)共享某些东西时,通常会在隐式意图列表中看到这两个项目(如下面的第一张图所示)。
当您想从Twitter应用程序共享某些内容时,您将获得相同的意图,但只有一个选项(直接发送消息)。 其他选项已以某种方式删除。 请参阅第二张图片以供参考。
我的问题是,Twitter应用程序如何做到这一点?
我相信他们查询可以处理内容的应用程序,并从那里删除自己的意图(推文),并在自定义的BottomSheet中显示结果。 我认为是这种情况,因为BottomSheet的退出动画与其他应用程序的标准Share BottomSheet动画有点不同。
如果不是自定义的,还有另一种方法可以过滤自己的应用中的意图?
尝试通过您想要在对话框中显示的应用程序进行共享
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);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.