OPEN_APP_FEATURE调用异常:仅触发MAIN Intent无法获取参数排查
使用OPEN_APP_FEATURE触发异常的问题排查
问题描述
当通过语音或输入指令open MySentry panic调用BII的OPEN_APP_FEATURE时,系统仅触发android.intent.action.MAIN打开应用,而非预期的android.intent.action.VIEW,导致无法获取feature参数panic。
现有代码
Manifest声明
<activity android:name=".ui.permissions.PermissionActivity" android:exported="true" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="app" android:host="mysentry"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts" /> </activity>
Shortcuts.xml代码
<?xml version ="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <!-- google documentation method--> <capability android:name="actions.intent.OPEN_APP_FEATURE"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.eagleeye.mysentry.ui.permissions.PermissionActivity" android:targetPackage="com.eagleeye.mysentry"> <parameter android:name="feature" android:key="panic"/> </intent> </capability> <shortcut android:shortcutId="id_panic_one" android:icon="@drawable/normal_sentry_icon" android:shortcutShortLabel="@string/shortcut_short_label" android:shortcutLongLabel="@string/shortcut_long_label"> <capability-binding android:key="actions.intent.OPEN_APP_FEATURE"> <parameter-binding android:key="feature" android:value="panic" /> </capability-binding> </shortcut> </shortcuts>
问题分析与修正
你的实现存在两处关键错误:
1. Capability中的参数配置完全错误
在<capability>下的<parameter>标签,你把参数名和值的属性搞反了。OPEN_APP_FEATURE要求用android:key指定参数名(即feature),android:value指定参数值(即panic),而非原代码中的android:name="feature"+android:key="panic"。
2. Capability的Intent未关联匹配VIEW的Data
你的Manifest中VIEW类型的intent-filter绑定了app://mysentry的Scheme和Host,但在capability的<intent>里没有配置对应的data节点,导致系统无法匹配到该intent-filter,只能 fallback 到触发MAIN动作打开应用。
修正后的Shortcuts.xml关键部分
<capability android:name="actions.intent.OPEN_APP_FEATURE"> <intent android:action="android.intent.action.VIEW" android:targetClass="com.eagleeye.mysentry.ui.permissions.PermissionActivity" android:targetPackage="com.eagleeye.mysentry"> <!-- 关联Manifest中VIEW intent-filter对应的Data --> <data android:scheme="app" android:host="mysentry"/> <!-- 正确配置feature参数 --> <parameter android:key="feature" android:value="panic"/> </intent> </capability>
额外检查
在PermissionActivity中,确保正确获取参数:
- 如果通过
parameter绑定传递,可通过getIntent().getStringExtra("feature")获取 - 如果需要通过Uri参数传递,可在
data节点添加android:query="feature=panic",然后用getIntent().getData().getQueryParameter("feature")获取
内容的提问来源于stack exchange,提问作者Bilal Khurshid
相关产品推荐
相关产品推荐

