3

特定の http(s) リンクのインテントを処理する Android アプリに取り組んでいます。ほとんどの場合は機能しますが、Chrome でのリンクのクリックでは機能しません。これは、このバグ/不足している機能のためです。つまり、Chrome はこれらのクリックのインテントをブロードキャストしません。:/

最終的には修正される可能性がありますが、それまでの間、回避策を知っている人はいますか?

リンク自体を制御する場合、myapp://... などの独自の HTTP スキームを使用するか、JavaScript を使用してボタンのクリックを偽造することができます。どちらもインテントを送信します...しかし、制御しませんリンク。

具体的には、 http://github.com/snarfedのようなリンクを処理したいと考えています。私の活動の定義AndroidManifest.xmlは以下の通りです。Chrome からではなく、他のアプリからのこの種のリンク クリックのインテント ブロードキャストを正しく受信します。

<activity android:name="MyApp" android:exported="true">
  <intent-filter>
    <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:scheme="https" />
    <data android:host="github.com" />
  </intent-filter>
</activity>
4

2 に答える 2

9

各データ ポイントにスキーム、ホスト、および pathPrefix を含める必要があります。

適切なマニフェストの例:

<activity
    android:name=".PhotostreamActivity"
    android:label="@string/application_name">

    <!-- ... -->            

    <intent-filter>
        <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"
              android:host="flickr.com"
              android:pathPrefix="/photos/" />
        <data android:scheme="http"
              android:host="www.flickr.com"
              android:pathPrefix="/photos/" />
    </intent-filter>
</activity>

この例は、Romain Guy がまとめて、重複した質問で参照しているアプリケーションから取得したものです。

Android アプリを開くためのブラウザからのリンクをインターセプトする

注意すべきいくつかの注意点があります。インテント マッピングが有効になる前にバックグラウンドで Chrome を強制終了する必要があるようです。また、URL を直接入力すると、Chrome が提供するリンクの場合にのみ、アプリケーションはそれを使用できなくなります。アプリまでのアクション。

于 2013-07-24T12:26:30.170 に答える
4

インテント フィルターにパス、pathPrefix、または pathPattern がある場合にのみ、Chrome はインテントを起動するようです。したがって、ドメイン全体をフィルタリングするためにandroid:pathPattern=".*"、次のように を追加してこの問題を解決しました。

<intent-filter
    android:priority="999">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
        android:host="mydomain.com"
        android:scheme="http"
        android:pathPattern=".*" />
    <data
        android:host="www.mydomain.com"
        android:scheme="http"
        android:pathPattern=".*" />
</intent-filter>
于 2013-11-23T16:09:36.323 に答える