[英]Android : Receive custom broadcast when a button in a widget is clicked
我有一个可以正常工作的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>
编辑 :我也在论坛中找到此,它可能与此问题有关
您根本无法做到这一点。 BroadcastReceiver组件仅在对onReceiveIntent()的调用期间保持有效。 不允许在其中使用registerReceiver,因为当您从该方法返回时(此时您首先可以从寄存器中接收任何内容),该组件不再活动,并且系统可以随时终止回收记忆。
考虑一下:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.