1

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

4

1 回答 1

0

考虑一下:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);
于 2010-08-22T11:28:56.543 回答