You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 09:33:20