我有一个BroadcastReceiver
工作正常,即从Activity执行此代码,接收者接收意图:
Intent toggleIntent = new Intent(this, ToggleServicesReceiver.class);
this.sendBroadcast(toggleIntent);
但是我试图通过Widget中的按钮来做同样的事情:
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组件 在通话期间“活着” to onReceiveIntent();它不是 允许在其中使用registerReceiver, 因为当你回来的时候 那种方法(此时你可以 先收到你的任何东西 注册),组件不再 活着,系统可以杀死 任何时候回收记忆。
答案 0 :(得分:0)
考虑一下:
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);