Android:单击窗口小部件中的按钮时接收自定义广播

时间:2010-08-11 21:40:17

标签: android android-widget broadcastreceiver

我有一个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,   因为当你回来的时候   那种方法(此时你可以   先收到你的任何东西   注册),组件不再   活着,系统可以杀死   任何时候回收记忆。

1 个答案:

答案 0 :(得分:0)

考虑一下:

PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, toggleIntent, PendingIntent.FLAG_ONE_SHOT);