2016-10-20 3 views
1

私はImageviewをクリックしてURLを開くことができる複数のアプリケーションを表示する必要があります。このように:Android - Intent.createChooserからオプションを選択しても「開く」ダイアログが表示され続けます

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")); 

これはうまく動作し、選択を開きます。しかし、すべてのアプリの中で、私はデバイスの "デフォルトのブラウザ"アプリを選択すると、それは再び "開く"ダイアログボックスを要求します。しかし、私はクロムやfirefoxのような他のアプリを選択した場合、それはうまく動作し、ダイアログで2番目のオープンは表示されません。

デフォルトのブラウザアプリとは別に、他のブラウザアプリでは正常に動作します。

質問:デフォルトのブラウザでIntent.createChooserを使用した後でも、別の「開く」ダイアログボックスが開き、使用するアプリケーションを再度尋ねるような既知の問題はありますか?はいの場合、それを取り除く方法?

注:これはすべてのデバイスで発生するわけではありません。いくつかのデバイスではうまくいきますが、他のデバイスでは、Intent.createChooserからオプションを選択してもダイアログが開いているかどうかを尋ねます。

+1

これは、デフォルトのブラウザがサイトのモバイルページにリダイレクトされているために、新しいリクエストのように処理されるため、もう一度セレクタがポップされていると思います。サムスンの既定のブラウザとYouTube URLを使用してこれまでに見たことがあります。これは 'Intent.createChooser()'では問題ではなく、特定のブラウザーがどのように振る舞うかというだけです。 –

+0

@MikeMに返信してくれてありがとうございます。この問題に対処するソリューションはありませんか? –

+1

モバイルサイトのURLを明示的に渡すことができるため、リダイレクトする必要はありません。あなたの状況によっては、それは望ましくないかもしれません。 –

答えて

1

ここで問題となっているのは、特定のブラウザそのものであり、必ずしもお客様のIntentチューザではないと思われます。モバイルサイトにリダイレクトされると、基本的なブラウザは新しいリクエストとしてこれを処理し、自分自身のIntentの選択肢を表示することがあります。

モバイルサイトのURLを可能な限り明示的に渡すことで、リダイレクトの必要がなくなり、選択したブラウザでサイトを直接開くことができます。

+0

リダイレクトの新しいリクエストを作成するデフォルトのブラウザがデバイスにあるかどうかをプログラマに知らせるための回避策はありますか?私はこれが可能ではないと思うが、それでも一度確実にしたい。 –

+1

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええるのは、しかし、それは価値があるよりも多くのトラブルのように思えます。 –

関連する問題