gpt4 book ai didi

android - 为什么我的 intent-filter 会匹配它不应该匹配的 URI?

转载 作者:太空狗 更新时间:2023-10-29 12:41:54 25 4
gpt4 key购买 nike

我的 android 应用有一个像这样的 intent 过滤器:

  <intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="satur9nine" android:host="*" />
<data android:scheme="http" android:host="www.satur9nine.com" android:pathPrefix="/app" />
</intent-filter>

它应该匹配 satur9nine://anything 或 http://www.satur9nine.com/app/anything .但是它匹配 http://www.notmywebsite.com/app ,怎么了?

最佳答案

这方面的文档相当模糊,但您可以通过查看 IntentFilter 中的内容来弄清楚。记录方法 addDataScheme , addDataPathaddDataAuthority都是相互独立的,无法将scheme、path、authority加在一起。

查看 IntentFilter source确认它。数据 URI 的每个部分(架构、路径、权限)都存储在其自己的列表中,因此来自不同 <data> 的值当匹配代码运行时,元素最终混合在一起,而不是每个 <data>元素被独立检查。这意味着数据 URI 可以将任何方案与具有任何路径前缀的任何主机匹配,这不是我们想要的。

解决方案是有多个intent-filter像这样的部分:

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="www.satur9nine.com" android:pathPrefix="/app" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="satur9nine" android:host="*" />
</intent-filter>

Intent 过滤器匹配将以这种方式运行两次,并且不会混合方案、主机和路径。

关于android - 为什么我的 intent-filter 会匹配它不应该匹配的 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24440796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com