我有一个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 ,因为当您从该方法返回时(此时您可以首先从您的寄存器中接收任何内容),该组件不再存在,系统可以随时终止以回收记忆。