Android - 即使在从Intent.createChooser中选择一个选项后,仍然会显示“打开方式”对话框

时间:2016-10-20 08:48:24

标签: android android-intent

我有一个Imageview点击我需要打开的选择器,它会显示多个有资格打开网址的应用。我正在做这样的事情:

Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse(article.getAndroidUrl()));
                if(Build.VERSION.SDK_INT>21){
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
                } else {
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
                }
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(Intent.createChooser(intent, "Open Url Using"));

这很好用并打开选择器。但在所有应用程序中,如果我选择设备的“默认浏览器”应用程序,那么它再次要求“打开方式”对话框。但是,如果我选择其他应用程序,如chrome或firefox,那么它工作正常,没有第二次打开对话框显示。

除了默认的浏览器应用程序,对于其他浏览器应用程序,它工作正常。

问题:是否存在任何已知问题即使在使用Intent.createChooser后,对于默认浏览器,另一个“打开方式”对话框将会再次询问要使用哪个应用?如果是,如何摆脱它?

注意:每个设备都不会发生这种情况。对于某些设备,这可以正常工作,但对于其他设备,即使从Intent.createChooser中选择了一个选项,它也会再次请求打开对话框。

1 个答案:

答案 0 :(得分:1)

此处的问题似乎与特定浏览器本身有关,而不一定与您的 public function __construct($key, $cipher = 'AES-128-CBC') { $key = (string) $key; if (static::supported($key, $cipher)) { $this->key = $key; $this->cipher = $cipher; } else { throw new RuntimeException('The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.'); } } 选择器有关。当重定向到移动网站时,基本浏览器通常会将其作为新请求处理,并且可能会显示自己的Intent选择器。

解决方法是尽可能明确地传递移动网站网址,这样就不需要重定向,并直接在所选浏览器中打开网站。