如何获得意图Intent.ACTION_VIEW但不是Intent.ACTION_SEND

时间:2017-08-28 15:50:40

标签: android android-intent

在android中。某些应用在声明过滤器中声明了ACTION_VIEW和ACTION_SEND。我想获得所有ACTION_VIEW应用程序但不是ACTION_SEND。可能吗?谢谢。

1 个答案:

答案 0 :(得分:0)

搜索ACTION_SENDACTION_VIEW并检查循环中哪个应用具有这两个应用并从列表中排除它们。

public ArrayList<ResolveInfo> getApps() {
    ArrayList<ResolveInfo> result = new ArrayList<>();

    Intent view = new Intent();
    view.setAction(android.content.Intent.ACTION_VIEW);
    view.setDataAndType(Uri.fromFile(new File("sdcard/blah/blah/blah")), "*/*");

    Intent send = new Intent();
    send.setAction(Intent.ACTION_SEND);
    send.setDataAndType(Uri.fromFile(new File("sdcard/blah/blah/blah")), "*/*");

    PackageManager packageManager = this.getPackageManager();
    List<ResolveInfo> actionView = packageManager.queryIntentActivities(view, 0);
    List<ResolveInfo> actionSend = packageManager.queryIntentActivities(send, 0);

    for (ResolveInfo viewItem : actionView) {
        boolean notFound = true;

        for (ResolveInfo sendItem : actionSend) {

            if (viewItem.activityInfo.name.equals(sendItem.activityInfo.name))
                notFound = false;

            if (notFound)
                result.add(viewItem);
        }
    }


    return result;
}