カスタム URL スキームを登録する Android アプリがあります (app:// としましょう)
メイン アクティビティのonResume()
メソッドでは、 を呼び出して URL からデータを取得しますgetIntent().getData()
。
app://action/1234
そのようなリンク ( など)を含む Web ページを参照すると、getIntent().getData()
適切なアクションを実行するために必要な情報が返されます。それはいいです。
今、私は自分のアプリに同じことをする WebView を持ちたいと思っています。これが私のコードです:
WebView banner = ...
banner.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
if (url.startsWith("app://")) {
try {
Intent i = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
startActivity(i);
return true;
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
}
WebView のリンクをクリックするonResume()
と、メイン アクティビティのメソッドは BUT getIntent().getData()
returnsと呼ばれますnull
。
私は推測する
Intent i = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
startActivity(i);
それを行うには良い方法ではありません。
ブラウザでリンクをクリックしたときに発生する同じイベントを再現するにはどうすればよいですか?
編集:
私のアクティビティにはandroid:launchMode="singleTop"
問題があり、それが問題の原因のようですが、起動モードを設定しないと、アクティビティの別のコピーが起動されます (それは望ましくありません)。オーバーライドしてインテントを処理しようとしonNewIntent()
ましたが、与えられたインテントでデータを見ることができます。しかし、アプリがその内部または別のアプリから起動された場合と同じように反応するようにしたい
これを行うのは安全ですか?:
@Override
public void onNewIntent(Intent intent) {
getIntent().setData(intent.getData());
}