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

Sch*_*hor 6 android android-intent

我将我的 android 应用程序设置为从特定服务器打开某些 url。当我的应用程序不打算打开某个 url 时,可能会出现一种情况,因此服务器将返回错误。

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

Intent intent = new Intent(Intent.ACTION_VIEW, URI);
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

将导致应用程序无限循环地打开,因为设备将 url 识别为需要由我的应用程序打开的 url。

我发现的一种解决方案是强制设备在 chrome 中打开 url:intent.setPackage("com.android.chrome");

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

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

PS有问题的网址没有可以将它们与其他网址区分开来的通用前缀。

Sch*_*hor 5

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

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

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

intent.setPackage(l.get(0).activityInfo.processName);
Run Code Online (Sandbox Code Playgroud)

请注意,也可以使用标志接收所有匹配的应用程序PackageManager.MATCH_ALL