非常に具体的な要件があります。ブラウザで(WebView
ではなく)URLリンクを開く必要があり、現在開いているタブで開く必要があります。つまり、開いているページは "redirect "(同じタブ内を意味します)。
複数のSO投稿(以下を参照)のコンセンサスに基づいて、これを行う方法は次のとおりです。
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID, packageName);
startActivity(intent);
具体的には、同じタブでリンクを開くようにブラウザに指示するのは Browser.EXTRA_APPLICATION_ID
です。
理論的には、これはすべてのブラウザで機能するはずです。
ここで重要なのは、上記の
packageName
は[〜#〜]ブラウザ[〜#〜]のパッケージ名である必要があるということです。 )アプリのパッケージ名ではなく、開きたいもの(たとえば、com.Android.chrome
またはorg.mozilla.firefox
)。ドキュメントでは、独自のアプリのパッケージ名を使用するように求められていますが、独自のアプリのパッケージ名を使用している場合、現在開いているタブのリンクは開きません。 。両方Chrome&Firefoxは新しいタブでリンクを開きます。
したがって、これを機能させる秘訣は、packageName
をcom.Android.chrome
として設定し、voilà、Chromeは、現在開いているタブでリンクを開きます。Yay!
同じトリックはFirefoxでは機能しません。
これを一般的に任意/すべてのブラウザで機能させるにはどうすればよいですか?
どうやらこれはFirefoxの既知の問題です:
[〜#〜] a [〜#〜]。 FirefoxはインテントからのフラグBrowser.EXTRA_APPLICATION_ID
を処理しません 。
[〜#〜] b [〜#〜]。 Android Mozilla FireFoxが新しいタブでページを開かない 。
このバグは修正されましたか? Firefoxに同じタブでリンクを開かせる既知の方法はありますか?
これを任意の/すべてのブラウザで機能させるにはどうすればよいですか?
参照:
1。 Androidリンクを強制的に開いてChromeで開く方法はありますか? 。
3。 Androidブラウザ、複数のタブを避けてください でURLを開きます。
4。 最後に開いたタブのURLをchrome で開きます。
5。 Android code(webviewを使用しない) を使用してブラウザの同じタブでURLを開きます。
7。 Browser.EXTRA_APPLICATION_IDがICSで機能していません 。
9。 デフォルトで新しいタブにローカルページが読み込まれないようにする方法Androidブラウザ 。
10。 Browser.EXTRA_APPLICATION_ID を使用してタブキューを処理します。
11。 URIインテントの読み込みを許可します 。
Firefoxの場合は、コンポーネントをインテントに設定して、以下の回避策を試してください。
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setComponent(new ComponentName("org.mozilla.firefox","org.mozilla.firefox.App"));
this.startActivity(intent);