Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从共享列表中隐藏自己的隐含意图_Android_Android Intent - Fatal编程技术网

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

Android 从共享列表中隐藏自己的隐含意图,android,android-intent,Android,Android Intent,Twitter Android应用程序(至少)有两个意向过滤器。一个用于推特,一个用于直接消息 当你想通过twitter(从另一个应用程序)分享东西时,你通常会看到隐式意图列表中列出的两个项目(如下图所示) 当你想分享来自twitter应用程序的内容时,你会得到同样的目的,但只有一个选项(直接发送消息)。其他的选择不知何故被删除了。请参见第二幅图以供参考 我的问题是,Twitter应用程序是如何做到这一点的 我相信他们会查询能够处理内容的应用程序,并从中删除他们自己的意图(Tweet),并在

Twitter Android应用程序(至少)有两个意向过滤器。一个用于推特,一个用于直接消息

当你想通过twitter(从另一个应用程序)分享东西时,你通常会看到隐式意图列表中列出的两个项目(如下图所示)

当你想分享来自twitter应用程序的内容时,你会得到同样的目的,但只有一个选项(直接发送消息)。其他的选择不知何故被删除了。请参见第二幅图以供参考

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

我相信他们会查询能够处理内容的应用程序,并从中删除他们自己的意图(Tweet),并在自定义的底部表单中显示结果。我相信是这样的,因为底部表单的退出动画与其他应用程序的标准共享底部表单动画有点不同


如果不是自定义的,是否有其他方法可以在您自己的应用程序中过滤您自己的意图?

尝试此方法,以便通过要在对话框中显示的应用程序共享

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);
    }
}
}
public void onShareClick(视图v){
List targetShareIntents=new ArrayList();
意向共享意向=新意向();
shareIntent.setAction(Intent.ACTION\u SEND);
shareIntent.setType(“文本/普通”);
List ResInfo=getPackageManager().QueryInputActivities(shareIntent,0);
如果(!resinfo.isEmpty()){
System.out.println(“有包”);
对于(ResolveInfo resInfo:resInfo){
字符串packageName=resInfo.activityInfo.packageName;
Log.i(“包名”,packageName);
如果(packageName.contains(“com.twitter.android”)| packageName.contains(“com.facebook.katana”)| packageName.contains(“com.kakao.story”)){
意图=新意图();
setComponent(新组件名(packageName、resInfo.activityInfo.name));
intent.setAction(intent.ACTION\u SEND);
intent.setType(“文本/普通”);
intent.putExtra(intent.EXTRA_TEXT,“TEXT”);
intent.putExtra(intent.EXTRA_SUBJECT,“SUBJECT”);
intent.setPackage(packageName);
targetShareIntents.add(意图);
}
}
如果(!targetShareIntents.isEmpty()){
System.out.println(“有意向”);
Intent-chooserint=Intent.createChooser(targetShareIntents.remove(0),“选择要共享的应用程序”);
选择content.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetShareIntents.toArray(新地块[]{}));
开始触觉(选择内容);
}否则{
System.out.println(“没有意图”);
showdiaaog(这个);
}
}
}

非常感谢,但这并不能回答问题。我知道这种方式,我知道我可以手动过滤,但我的问题是,是否有其他方式,或者Twitter是否也这样做。可能有其他方式,但我认为Twitter的人是在手动过滤。你知道的其他方式是什么?为什么你认为Twitter是手动的?他们还能用什么?我认为他们也在手工操作。。如果我的答案对你有帮助的话,请把它投上去。谢谢