Android:单击小部件中的按钮时接收自定义广播
Posted
技术标签:
【中文标题】Android:单击小部件中的按钮时接收自定义广播【英文标题】:Android : Receive custom broadcast when a button in a widget is clicked 【发布时间】:2011-03-28 15:28:05 【问题描述】:我有一个工作正常的BroadcastReceiver
,即从 Activity 执行此代码,接收方会收到意图:
Intent toggleIntent = new Intent(this, ToggleServicesReceiver.class);
this.sendBroadcast(toggleIntent);
但我正在尝试通过小部件中的按钮执行相同的操作:
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
...
Intent toggleIntent = new Intent(context, ToggleServicesReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteView.setOnClickPendingIntent(R.id.widget_button, pendingIntent);
代码被调用(我已经用调试器检查过了),但是当用户点击按钮时,同样的BroadcastReceiver
没有收到Intent
。
会发生什么?
编辑:BroadcastReceiver
是在androidManifest.xml
中定义的,现在我不确定是否需要<intent-filter>
:
<receiver android:name="foo.receivers.ToggleServicesReceiver">
<intent-filter>
<action android:name="foo.intent.action.SERVICES_TOGGLE" />
</intent-filter>
</receiver>
编辑:我也在论坛上发现了这个,可能和这个问题有关
您根本无法做到这一点。一种 仅广播接收器组件 在通话期间“活着” 到 onReceiveIntent();它不是 允许在其中使用 registerReceiver, 因为当你从 该方法(此时您可以 首先收到你的任何东西 注册),该组件不再 活着,系统可能会在 随时回收内存。
【问题讨论】:
看起来不错。这个BroadcastReceiver
声明在哪里——清单或registerReceiver()
?如果是后者,您确定它实际上是在单击应用小部件时注册的吗?
它在清单中声明,但我已经尝试过两种方式。我要重复我的测试,以防我错过了什么。我还在 SO 中找到了一个与相同问题密切相关的问题 (***.com/questions/3044275/…)
【参考方案1】:
考虑一下:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);
【讨论】:
以上是关于Android:单击小部件中的按钮时接收自定义广播的主要内容,如果未能解决你的问题,请参考以下文章