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

Android开发调用requestPinAppWidget传Bundle 配置Activity取参为空如何解决

问题原因

调用AppWidgetManager.requestPinAppWidget()时传入的自定义参数Bundle,不会直接挂载到配置Activity启动Intent的根extras下。系统会将你传入的这个Bundle统一封装在固定key AppWidgetManager.EXTRA_APPWIDGET_OPTIONS 对应的子Bundle中,直接调用intent?.extras?.getString("id")读取根extras,自然拿不到传入的id值。
另外注意:方法第三个参数传入的pendingIntent是小组件固定成功后的系统回调意图,和配置Activity的启动参数没有关联,不要混淆两个意图的作用。

正确调整方式
  • 配置Activity中读取参数的逻辑替换为如下写法,先取出系统封装的options Bundle,再读自定义参数:
// 取出系统存放小组件配置参数的Bundle
val widgetOptions = intent?.getBundleExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS)
// 读取自定义传入的id
val targetId = widgetOptions?.getString("id")
  • 做好场景兼容:如果支持用户手动从小组件列表拖拽添加的场景,这种启动方式下options里不会有你提前传入的自定义id,需要做好空值兜底,等系统给小组件分配正式的appWidgetId后,再完成业务id和小组件id的关联。
  • 持久化兜底:不要把核心业务参数只依赖该Bundle传递,小组件添加成功后,要把业务id和系统分配的appWidgetId做本地持久化映射(可存在SharedPreferences、本地数据库中),后续小组件更新、设备重启后,直接通过appWidgetId查询映射拿到业务参数,避免参数丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:55:15