私はBroadcastReceiver
正常に動作するを持っています。つまり、アクティビティからこのコードを実行すると、受信者はインテントを受け取ります。
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を使用することは許可されていません。メモリー。