2

とセットIntentFilterのスキームでを使用するコード例はたくさんあります。Android でのブラウザー POST の結果である MIME タイプの処理、 Androidの XML (具体的には rss) をブラウズするためのインテント フィルター、およびrss リンクがブラウザーで開かれているときに Android アプリを開く方法への回答を参照してください。"http"mimeType

私が持っている特定の使用例は、最後の 2 つの質問のような RSS リンクですが、私がインターセプトしたい RSS フィードには、 で有効に照合できるパスpathPatternがなく、それを制御することはできません。Google Reader APK から最初に抽出されたものと同じインテント フィルターを使用してみました。

    <intent-filter android:label="@string/NewURL_intent_rss">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http"/>
        <data android:host="*" />
        <data android:mimeType="text/xml"/>
        <data android:mimeType="application/rss+xml" />
        <data android:mimeType="application/atom+xml"/>
        <data android:mimeType="application/xml"/>
    </intent-filter>

しかし、Chrome でそのようなファイルを指すリンクをクリックしてこれをテストすると、Chrome はそのファイルを参照するだけです。Google リーダーをインストールしましたが、それも意図に反応しません。mimeType行をpathPatternテスト URL に一致するaに置き換えると、アプリはインテントを受け取ります。サーバーに HEAD リクエストを送信することで、URL の Content-Type が「application/xml」として送信されていることを確認しました。テスト デバイスは、ストック ROM 上の Nexus 10 です。

フィルターを復元し、シェルmimeTypeから URL を起動して、別のテストを行いました。am startこのコマンドは、URL のみを指定して、

am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d http://my.test/url

ブラウザを立ち上げたのですが、このコマンドで型を明示的に指定すると、

am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -t application/xml -d http://my.test/url

アプリと Google リーダーのインテント セレクターが表示されました。これは、フィルターが有効になっていることを確認しているようですが、Chrome はタイプを指定せずにインテントを開始しており、インテント リゾルバーは URL からタイプを見つけていません ( content:URI の場合と同様)。多くの人が、おそらく機能しないインテント フィルタを使用して推奨している可能性があります。誰かが決定的な答えを持っていますか:インテントフィルターを使用するのは何<data android:scheme="http" android:mimeType="..." />ですか?

4

1 に答える 1

0

別の StackOverflow の回答によると、ブラウザーは Content-Disposition ヘッダーをチェックし、添付ファイルを示している場合はインテント フィルターもチェックしません。

これはあなたが直面している問題でしょうか?

https://stackoverflow.com/a/8770360/304876

于 2013-07-10T12:32:14.800 に答える