1

私は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を使用することは許可されていません。メモリー。

4

1 に答える 1

0

このことを考慮:

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