我正在尝试将Messenger用作appwidget和活动之间的IPC机制。
我执行以下操作: 我创建了一个intent,当我在appwidget上单击一个按钮时,它会启动一个特定的活动。
intent = new Intent(mContext, TorchLightActivity.class);
intent.putExtra(RPC, new Messenger(mHandler));
intent.putExtra(TYPE, mType);
...
final PendingIntent actionPendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
remoteView.setOnClickPendingIntent(layout, actionPendingIntent);
当我点击我的小部件按钮时,会启动一项活动
onCreate(...)
final Bundle bun = getIntent().getExtras();
// Get null here
mMessanger = (Messenger) bun.get(FlashlightModule.RPC);
// Working great
mType = bun.getInt(FlashlightModule.Type);
查看捆绑包时,我可以看到我唯一的额外数据是FlashlightModule.Type
,例如int值。
意图是从一开始就使用额外内容创建的(请参阅Get the intent from onCreate in Android)并从头开始使用setData(请参阅Application widget with bundle?)
是否有可能将AppWidget之间的Messenger传递给我自己的活动?
谢谢。
答案 0 :(得分:0)
我正在尝试将Messenger用作appwidget和活动之间的IPC机制。
这没有任何意义。
你的AppWidgetProvider
实例会活几毫秒 - 再过一段时间,你做错了。它永远不会有机会通过Messenger
或任何其他方式将“IPC”用于您的活动。
此外,您永远不应该使用BroadcastReceiver
(例如AppWidgetProvider
)创建一些您希望活过onReceive()
结尾的内容(在onUpdate()
上AppWidgetProvider
,例如Handler
,更不用说Messenger
。
当您的活动希望更新应用小部件的用户界面时,它可以创建RemoteViews
并更新应用小部件。