我将我的Android应用设置为从特定服务器打开某些网址。 当我的应用程序无意打开某个URL时,可能会出现这种情况,因此服务器将返回错误。
收到错误后,我想在设备的浏览器中打开此网址。 由于我的应用程序被设置为打开此类网址的默认应用程序,因此尝试使用:
Intent intent = new Intent(Intent.ACTION_VIEW, URI);
context.startActivity(intent);
由于设备将网址识别为需要由我的应用程序打开的网址,因此会导致应用程序以递归方式无休止地打开。
我找到的一个解决方案是强制设备打开chrome中的网址:intent.setPackage("com.android.chrome");
如果设备不包含Chrome应用程序,则会出现问题。
是否有一个优雅的解决方案,而不是逐个列出所有可能的Android浏览器?
P.S。有问题的网址没有可以将其与其他网址区分开来的公共前缀。
答案 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
来接收所有匹配的应用。