匿名のBroadcastReceiverがWebView内のリンクに応答します。私はインテントフィルターでこれを行うことができると思ったが、物事は機能していない。ここに私の活動のためのコードは次のとおりです。ここでWebViewと匿名のBroadcastReceiverがアクティビティで通信中に問題が発生しました。
public class WebViewReceiverActivity extends Activity {
private BroadcastReceiver mReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView webView = (WebView) findViewById(R.id.webview);
webView.loadData("<a href=\"webview-receiver:///\">This should Toast</a>", "text/html", "utf8");
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Uri data = intent.getData();
if (data != null && data.getScheme().equals("webview-receiver")) {
Toast.makeText(WebViewReceiverActivity.this, "Toasty", Toast.LENGTH_SHORT).show();
}
}
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_VIEW);
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
intentFilter.addCategory(Intent.CATEGORY_BROWSABLE);
intentFilter.addDataScheme("webview-receiver");
registerReceiver(mReceiver, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
}
はmain.xmlレイアウトです:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbarStyle="insideOverlay" />
</LinearLayout>
私はページが見つからないというエラーなしトーストを取得するのWebView内のリンクをクリックすると。このアプローチは可能ですか?私はWebViewClientとshouldOverrideUrlLoading()を代わりに使用することを考えていますが、BroadcastReceiverのアプローチを私が好むよりもうまく動作させることができればと思います。
これは間違いなくそれを行う方法ですが、私の問題は私の例よりも少し複雑です(申し訳ありません)。私はコントロールしていないサーバーから外部HTMLを読み込み、WebViewにカスタムJavaScriptを読み込むことはできません。 –