我正在尝试让我的应用响应这些方案:
我的应用内://产品/ 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>
非常感谢!
答案 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 spec和Wikipedia entry on file-URIs。