6

インテント フィルターを使用して Web ビューからアプリ内の特定のアクティビティにリダイレクトする特定の URL があります。Android に独自の URI スキームを実装する方法では、ブラウザー ページに対してこれを行う方法について説明しましたが、この同じインテント フィルターは、その URL が webview を介してアクセスされた場合には機能しません。これらの WebView リンクをキャッチするために、このインテント フィルタに追加する必要があるものは他にありますか?

<intent-filter>
    <action android:name="android.intent.action.VIEW"></action>
    <category android:name="android.intent.category.DEFAULT"></category>
    <category android:name="android.intent.category.BROWSABLE"></category>
    <data android:host="myurl.com/stuff" android:scheme="http"></data>
  </intent-filter>`
4

2 に答える 2

4

マニフェストでインテントを宣言するだけでは、インテント フィルターと Web ビューを連携させることができず、想定されていないと思います。(なぜだろう...)それを行う方法は、webviewでそれらを開こうとしているときにURLをキャッチし、次にインテントを作成することだと思います。

次に、マニフェストで次のようにアクティビティ レジスタを登録します。

<activity android:name=".PretendChat">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"></action>
            <category android:name="android.intent.category.DEFAULT"></category>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <data android:host="chat" ></data>
            <data android:scheme="testing"></data>
            <data android:pathPattern=".*"></data>
        </intent-filter>
    </activity>

Web ビュー内の「testing://chat」のようなリンクをクリックすると、アクティビティ PretendChat が開くことが予想されます。そのためには、webview で使用している webview クライアントに次のコードが必要です。Webview を開始するアクティビティが WebviewActivity と呼ばれるとします。

private  class TestWebViewClient extends WebViewClient       {


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            WebviewActivity.this.startActivity(intent);


        }   catch(ActivityNotFoundException e) {

            Log.e(LOGTAG,"Could not load url"+url);
        }

        return super.shouldOverrideUrlLoading(view, url);    


    }
}
于 2013-08-21T16:29:34.727 に答える