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

如何将自定义Intent与Android Widget集成以在Google Assistant UI展示数据?

问题解答

可行性确认

完全可以实现将自定义Google Assistant Intent与Android Widget集成,在Assistant界面触发Intent后直接展示数据。核心是通过App Actions的Inline响应能力结合Widget的更新逻辑,让Assistant触发Intent后无需打开Activity,直接拉起Widget内容展示。


实现思路及步骤

1. 调整App Actions配置

修改原有的Capability配置,移除指向MainActivity的Intent配置,改为定义输入参数和输出数据结构,让Assistant能识别需要返回的展示内容:

<capability
    android:name="custom.actions.intent.GET_HISTORY_ITEM"
    app:queryPatterns="@array/queries_cap">
    <!-- 保留输入参数定义 -->
    <intent
        android:action="com.test.assistant.action.GET_PRICE_HISTORY"
        android:targetPackage="com.test.assistant.new">
        <parameter
            android:name="item"
            android:key="item"
            android:mimeType="https://schema.org/Text" />
        <parameter
            android:name="country"
            android:key="country"
            android:mimeType="https://schema.org/Text" />
    </intent>
    <!-- 新增输出数据结构,用于Assistant展示 -->
    <output
        android:name="priceHistory"
        android:mimeType="https://schema.org/StructuredValue">
        <property android:name="itemName" android:key="item" />
        <property android:name="country" android:key="country" />
        <property android:name="latestPrice" android:key="latestPrice" android:mimeType="https://schema.org/Number" />
    </output>
</capability>

2. 实现Intent接收与数据处理逻辑

创建BroadcastReceiver替代原MainActivity的参数接收逻辑,处理Intent中的item和country参数,获取数据并更新Widget:

public class PriceHistoryReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if ("com.test.assistant.action.GET_PRICE_HISTORY".equals(intent.getAction())) {
            // 解析参数
            String item = intent.getStringExtra("item");
            String country = intent.getStringExtra("country");
            
            // 模拟获取价格数据(实际替换为接口请求)
            double latestPrice = fetchPriceData(item, country);
            
            // 更新Widget
            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
            int[] widgetIds = appWidgetManager.getAppWidgetIds(
                new ComponentName(context, PriceHistoryWidgetProvider.class)
            );
            PriceHistoryWidgetProvider.updateWidget(context, appWidgetManager, widgetIds, item, country, latestPrice);
        }
    }

    private double fetchPriceData(String item, String country) {
        // 实现数据获取逻辑
        return 2.99;
    }
}

3. 配置Widget支持Assistant触发

在AndroidManifest中修改Widget的Receiver配置,添加自定义Action,让它能接收App Actions的Intent:

<receiver android:name=".PriceHistoryWidgetProvider">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
        <!-- 添加自定义Action接收Intent -->
        <action android:name="com.test.assistant.action.GET_PRICE_HISTORY" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_info" />
</receiver>

同时在WidgetProvider中实现更新逻辑:

public class PriceHistoryWidgetProvider extends AppWidgetProvider {
    public static void updateWidget(Context context, AppWidgetManager appWidgetManager,
                                   int[] appWidgetIds, String item, String country, double price) {
        for (int widgetId : appWidgetIds) {
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_price_history);
            
            // 设置Widget内容
            views.setTextViewText(R.id.tv_item, item);
            views.setTextViewText(R.id.tv_country, country);
            views.setTextViewText(R.id.tv_price, String.format("$%.2f", price));
            
            appWidgetManager.updateAppWidget(widgetId, views);
        }
    }
}

4. 配置Assistant展示逻辑

如果需要让Assistant直接展示Widget,需使用App Actions的Inline Widget能力,在配置中指定Widget的ID,让Assistant拉起该Widget并嵌入到界面中。若无需复杂交互,也可以简化为返回结构化数据,让Assistant自动渲染为卡片(实现成本更低)。


关键建议

  • 优先用Rich Responses:如果仅展示简单数据,直接返回结构化数据让Assistant渲染成卡片,无需Widget,开发效率更高。
  • 适配Assistant界面:若使用Widget,需确保Widget尺寸符合Assistant的界面规范,避免内容截断或显示异常。
  • 测试工具:用App Actions Test Tool验证Intent触发、参数传递和数据返回的正确性,确保Assistant能正常展示内容。

内容的提问来源于stack exchange,提问作者KomalG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:45:17