あなたの最初の考えは正しいです。
実際、 shouldOverrideUrlLoading()
まさにそれを行うための API の一部であると私は信じています。
アプリで URL を開く =
super.shouldOverrideUrlLoading();
mYourWebViewInstance.loadUrl(url);
return true;
モバイル ブラウザで URL を開く =
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url ));
startActivity(browserIntent);
return true;
このコードは、このデータ型を処理できるアプリを直接起動します。この場合は、デバイスにインストールされている任意のブラウザー アプリです。または、複数の Web ブラウザーがある場合は、ブラウザーの 1 つを選択して URL を表示するインテント チューザーを提供します。インストールされており、デフォルトに設定されているものはありません(常に...で開きます)
ドキュメントtrue
に従って戻るということは、自分で URL を処理したことを意味し、イベントは消費されます。
また、 Android プラットフォームと特定のファームウェア間で一貫性がないという問題もあります。私の経験から、一部のデバイスでは、このコールバックをオーバーライドしないとデフォルトで false が返され (外部 Web ブラウザーのインテント チューザーがトリガーされます)、一部のデバイスでは返されることがわかりました。デフォルトでは真です。
そのため、アプリがすべてのデバイスでどのように動作するかを正確に把握するために、常にこのコールバックをオーバーライドする必要があります。
それで、それはあなたの質問に答えていますか?