从共享列表中隐藏自己的隐含意图

时间:2016-03-30 15:22:53

标签: android android-intent

Twitter Android应用程序(至少)有两个intent-filters。一个用于推文,一个用于直接消息。

如果您想通过Twitter(来自其他应用)分享内容,您通常会看到隐藏意图列表中列出的两个项目(如下面的第一张图片所示)。

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

当您想要从Twitter应用程序分享内容时,您会获得相同的意图,但只有一个选项(指示消息)。其他选项以某种方式被删除。请参阅第二张图片以供参考。

Sharing from Twitter

我的问题是,Twitter应用程序如何做到这一点?

我相信他们会查询可以处理内容的应用并从中删除自己的意图(推文)并在自定义BottomSheet中显示结果。我相信是这种情况,因为BottomSheet的退出动画与其他应用程序的标准Share BottomSheet动画略有不同。

如果它不是自定义的,是否有另一种方法可以在您自己的应用中过滤您自己的意图?

1 个答案:

答案 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);
    }
}
}