给出了这三个网址:
1) https://example.com
2) https://example.com/app
3) https://example.com/app?param=hello
假设我在gmail-app中收到包含这三个链接的邮件,则需要以下行为:
1) Should not open the app
2) Should open the app
3) Should open the app and extract the parameter's value
到目前为止我已经取得的成就:
<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:host="example.com"
android:pathPrefix="/app"
android:scheme="https" />
</intent-filter>
此代码段在1)
和2)
的情况下工作正常:第一个URL未在应用程序中打开,第二个URL在应用程序中打开。但是遗憾的是,我没有通过应用程序打开第三个链接。
我还尝试了path
,pathPrefix
和pathPattern
的一些不同变体,但是我没有运气实现所有三种给定的行为。
因此,我需要您的帮助,您能否提供满足给定要求的代码段或我可以测试的一些提示?
更新:
将android:pathPrefix
更改为android:pathPattern
现在可以正常使用:仅在案例2)
和3)
中显示系统的意图选择器,案例1)
直接打开浏览器
但是
我要另外实现的是在进入应用程序或触发意图选择器之前检查特定参数。仅当参数param
拥有值hello
而不是goodbye
时,才应该发生这种情况。在pathPattern
属性中使用某种正则表达式是否可能?
答案 0 :(得分:0)
我希望此解决方案可以帮助您解决任务。
Manifest.xml
不要在 Manifest.xml
中包含android:pathPrefix="/app"
<activity android:name=".YourActivity">
<intent-filter android:label="@string/app_name">
<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="example.com"/>
</intent-filter>
</activity>
在YourActivity.kt中检查Intent数据以执行进一步的操作。
注意:该代码是用Kotlin编写的
val action = intent.action
val data = intent.dataString
if (Intent.ACTION_VIEW == action && data != null) {
if (data.equals("http://example.com")) {
Toast.makeText(this, "contains only URL", Toast.LENGTH_SHORT).show()
} else if (data.contains("http://example.com/") && !data.contains("?")) {
Toast.makeText(this, "contains URL with pathPrefix", Toast.LENGTH_SHORT).show()
} else if (data.contains("http://example.com/") && data.contains("?")) {
Toast.makeText(this, "contains URL with data", Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(this, "Intent from Activity", Toast.LENGTH_SHORT).show()
}