intent-filter中空主机的说明符是什么?

时间:2015-11-09 14:20:16

标签: android manifest

我正在尝试让我的应用响应这些方案:

  

我的应用内://产品/ XXX

  

我的应用内://

以下代码有效,但我收到警告 android:host不能为空。它仍然有效,但是 - 是否有正确的方法来指定空主机?

我不想将“*”指定为android-host,因为还有其他活动可以处理不同的操作,然后它们不能直接打开,但我正在选择一个选择器对话框哪个活动应该开放。

<activity android:name=".ui.OpenerActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:screenOrientation="portrait" >
        <intent-filter>
            <data android:scheme="my-app" />
            <data android:host="product" />
            <data android:host="" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

非常感谢!

1 个答案:

答案 0 :(得分:2)

在您的URI中没有主机(或更正式的权限)部分绝对没问题。想想常用的file:///tmp/example.file

请注意,无主机的分层URI不是 opaque (如mailto:john@example.com),但有一个路径。与文件URI一样,主机名被单个/替换。

因此,您的URI格式应为my-app:///product/XXX。意图过滤器可能如下所示:

<intent-filter>
  <category android:name="android.intent.category.DEFAULT"/>

  <action android:name="android.intent.action.VIEW"/>

  <data android:host=""/>
  <data android:scheme="my-app"/>
  <data android:pathPrefix="/product"/>
  <data android:pathPattern=".+"/>
</intent-filter>

您仍然会收到有关空主机名的警告,这绝对没问题。此警告是检查Firebase App Indexing的结果,我认为只有在存在网站时才会有意义(您可以从中获取主机名,即整个URI)。

由于您无论如何都不会使用索引,因此可以通过将以下内容添加到项目lint.xml中来删除警告:

<!-- no app indexing without a hostname -->
<issue id="GoogleAppIndexingUrlError" severity="ignore"/>

有关详细信息,请查看URI specWikipedia entry on file-URIs