Android上的Chrome解决方法在点击链接时未触发意图

时间:2013-07-17 17:44:55

标签: android google-chrome

我正在开发一款处理某些http(s)链接意图的Android应用。它适用于大多数情况,但不适用于Chrome中链接的点击,因为this bug/missing feature。简而言之,Chrome不会广播这些点击的意图。 :/

最终可能会修复,但与此同时,是否有人知道解决方法?

如果我自己控制链接,我可以使用自己的HTTP方案,例如myapp:// ...,或者我可以use JavaScript to fake a button click,两者都发送意图......但我不控制链接。

具体来说,我想处理像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>

2 个答案:

答案 0 :(得分:9)

您需要在每个数据点中包含scheme,host和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放在一起的应用程序,并在此处重复提问:

Intercepting links from the browser to open my Android app

需要注意的几点需要注意,似乎你需要在意图映射生效之前在后台杀死Chrome。如果你直接输入网址,那么只有当它是一个链接时才会允许应用程序使用它Chrome会根据应用提供操作。

答案 1 :(得分:4)

如果intent过滤器有路径,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>