我正在创造和ACTION_VIEW带有类似 URI 的意图https://www.example.com/somedirection https://www.example.com/somedirection.
有一个应用程序,我们称之为示例应用程序可以打开该意图,但如果您的手机中没有该应用程序。然后您可以在任何浏览器中打开该 URI。
问题是,我不希望用户使用 ExamplesAPP 来遵循该意图,因为当用户返回我的应用程序时我遇到了一些问题(他们必须按照该意图进行付款)。
因此,如果用户没有该应用程序,没问题,一切都很好。
但是,如果用户有 EXAMPLEAPP,则意图选择器仅显示该应用程序,而不会显示任何浏览器,但是,正如我所说,我不希望用户使用该应用程序完成意图。
为什么选择器不显示任何浏览器(我安装了 Chrome)而仅在安装应用程序时显示应用程序?
这是我的代码。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(electronicLink));
Intent chooser = Intent.createChooser(intent, "Some title");
if (intent.resolveActivity(packageManager) != null) {
context.startActivity(chooser);
}
我也尝试过打电话
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0);
我只会在安装时看到该应用程序,而在未安装时看到 Chrome。
是的,我在 Android 11 上发现了同样的问题。在我的 Pie 上工作正常,但并非如此。
因此我创建了自己的代码来获取查询:
private static List<ResolveInfo> queryIntentActivities(PackageManager pm,Intent in) {
ArrayList<ResolveInfo> queries=new ArrayList<>();
{
// get default queries
List<ResolveInfo> i=pm.queryIntentActivities(in, 0);
if(i!=null){
queries.addAll(i);
}
}
// check if package name already not set
if(Utils.isEmpty(in.getPackage())){
// search all installed apps for custom query
for(ApplicationInfo ai:pm.getInstalledApplications(0)){
// clone and change package name
Intent intent=in.cloneFilter().setPackage(ai.packageName);
// get queries of current package with intent
List<ResolveInfo> i=pm.queryIntentActivities(intent, 0);
// check if the app has queries for the intent
if (i != null) {
// add all queries to the list
for(ResolveInfo ri:i){
// check for duplicate entries
if(!queries.contains(ri)){
queries.add(ri);
}
}
}
}
}
return queries;
}
希望它有效;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)