Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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,我正在寻找一种方法,在设备中搜索所有能够通过“查看”和“可浏览”类别过滤意图的应用程序 我找到了以下链接,并学习了如何列出所有意图过滤器,但如何只列出那些只有上述参数的过滤器 提前感谢此代码应该或多或少满足您的要求。主要问题是,我认为您不会发现任何过滤类别的活动可浏览,而不需要特定类型的数据。我在我的手机上尝试了它,直到我在Intent上添加了setData()调用,我才得到任何有用的东西 PackageManager manager = getPackageManager();

我正在寻找一种方法,在设备中搜索所有能够通过“查看”和“可浏览”类别过滤意图的应用程序

我找到了以下链接,并学习了如何列出所有意图过滤器,但如何只列出那些只有上述参数的过滤器


提前感谢

此代码应该或多或少满足您的要求。主要问题是,我认为您不会发现任何过滤
类别的活动可浏览
,而不需要特定类型的数据。我在我的手机上尝试了它,直到我在Intent上添加了
setData()
调用,我才得到任何有用的东西

    PackageManager manager = getPackageManager();
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.addCategory(Intent.CATEGORY_BROWSABLE);
    // NOTE: Provide some data to help the Intent resolver
    intent.setData(Uri.parse("http://www.google.com"));
    // Query for all activities that match my filter and request that the filter used
    //  to match is returned in the ResolveInfo
    List<ResolveInfo> infos = manager.queryIntentActivities (intent,
                                   PackageManager.GET_RESOLVED_FILTER);
    for (ResolveInfo info : infos) {
        ActivityInfo activityInfo = info.activityInfo;
        IntentFilter filter = info.filter;
        if (filter != null && filter.hasAction(Intent.ACTION_VIEW) &&
                  filter.hasCategory(Intent.CATEGORY_BROWSABLE)) {
            // This activity resolves my Intent with the filter I'm looking for
            String activityPackageName = activityInfo.packageName;
            String activityName = activityInfo.name;
            System.out.println("Activity "+activityPackageName + "/" + activityName);
        }
    }
}
PackageManager=getPackageManager();
意图=新意图();
intent.setAction(intent.ACTION\u视图);
intent.addCategory(intent.CATEGORY可浏览);
//注意:提供一些数据以帮助Intent解析器
intent.setData(Uri.parse(“http://www.google.com"));
//查询与我的筛选器匹配的所有活动,并请求筛选器使用
//在ResolveInfo中返回要匹配的
List infos=manager.querytentActivities(意图,
PackageManager.GET_RESOLVED_FILTER);
for(ResolveInfo:infos){
ActivityInfo ActivityInfo=info.ActivityInfo;
IntentFilter filter=info.filter;
if(filter!=null&&filter.hasAction(Intent.ACTION\u视图)&&
filter.hasCategory(Intent.CATEGORY_可浏览)){
//此活动通过我正在寻找的筛选器解决了我的意图
字符串activityPackageName=activityInfo.packageName;
字符串activityName=activityInfo.name;
System.out.println(“活动”+activityPackageName+“/”+activityName);
}
}
}

你好,大卫。精彩片段!你的意思是用setData查询特定的MIME类型以找出特定的结果?到目前为止,我知道如果我通过setData()提供一个特定的URI,MIME类型将由Intent本身解析(我采用这种方法是为了避免在其他应用程序上使用fileChooser()。也许,这将是一段难看的代码,但也许我可以向setData()提供一个适当的虚拟URL作为常量,以帮助过滤准确性。某种丑陋的比较仪。我将根据您的代码片段进行尝试,稍后我会让您知道它是如何运行的。谢谢谢谢David,工作起来很有魅力,只需稍作调整(如果用户在设备中安装了某种应用程序,我只需要得到一个布尔值)。谢谢你的帮助!!!
info.filter
东西不起作用。ActivityInfo对象中没有名为filter的字段。@miguel
info。filter
指的是
ResolveInfo
对象,而不是
ActivityInfo
对象。