我的Android应用程序有一个像这样的意图过滤器:
<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://任何东西或http://www.satur9nine.com/app/anything。但它匹配http://www.notmywebsite.com/app,出了什么问题?
答案 0 :(得分:3)
关于此的文档相当模糊,但您可以通过在IntentFilter文档中看到方法addDataScheme
,addDataPath
和addDataAuthority
都是独立的来解决这个问题。彼此之间没有办法一起添加方案,路径和权限。
看IntentFilter source证实了这一点。数据URI的每个部分(模式,路径,权限)都存储在自己的List中,因此来自不同<data>
元素的值最终会在匹配代码运行时混合,而不是每个<data>
元素被独立检查。
解决方案是拥有多个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>