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有问题的网址没有可以将它们与其他网址区分开来的通用前缀。
正如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。
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |