当我的应用被设置为打开此网址的默认应用时,如何强制在设备的浏览器中打开网址

时间:2017-04-16 22:49:01

标签: android android-intent

我将我的Android应用设置为从特定服务器打开某些网址。 当我的应用程序无意打开某个URL时,可能会出现这种情况,因此服务器将返回错误。

收到错误后,我想在设备的浏览器中打开此网址。 由于我的应用程序被设置为打开此类网址的默认应用程序,因此尝试使用:

Intent intent = new Intent(Intent.ACTION_VIEW, URI);
context.startActivity(intent);

由于设备将网址识别为需要由我的应用程序打开的网址,因此会导致应用程序以递归方式无休止地打开。

我找到的一个解决方案是强制设备打开chrome中的网址:intent.setPackage("com.android.chrome");

如果设备不包含Chrome应用程序,则会出现问题。

是否有一个优雅的解决方案,而不是逐个列出所有可能的Android浏览器?

P.S。有问题的网址没有可以将其与其他网址区分开来的公共前缀。

1 个答案:

答案 0 :(得分:2)

正如CommonsWare建议的那样,我使用了PackageManger的queryIntentActivities()方法来查找默认浏览器:

Intent i = new Intent(Intent.ACTION_VIEW, unusedURI);
List<ResolveInfo> l = context.getPackageManager().queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY);

提取我使用的流程名称:l.get(0).activityInfo.processName

intent.setPackage(l.get(0).activityInfo.processName);

请注意,也可以使用标记PackageManager.MATCH_ALL来接收所有匹配的应用。