0

イベントをキャッチするために常に実行されるBroadcastReceiver(#1)があります。イベントが発生すると、特定のアクティビティでUIを変更する必要がある場合があります(そのアクティビティがアクティブな場合)。これを行うために、BroadcastReceiver#1に、アクティビティに存在する2番目のBroadcastReceiver(#2)によってキャッチされ、アクティビティが一時停止されていない場合にのみ登録/登録解除される新しいインテントを作成させます...ここで説明します: フォアグラウンドにある場合にのみ、BroadcastReceiverからアクティビティを通知します

すべてが機能しています...ただし、アクティビティにフォーカスがない場合、またはフォーカスがあるがイベントを処理しないことを選択した場合に、BroadcastReceiver#1にステータス通知を投稿してもらいたいと思います。したがって、アクティビティ(アクティブな場合)には、BroadcastReceiver#1に通信するための何らかの方法が必要です。

BroadcastReceiver#1に、X秒が経過した後に通知とともにイベントを投稿するスレッドを生成させると思いました...このスレッドには3番目のbroadcastreceiver#3があり、受信アクティビティがイベントの処理を選択した場合は、通知を中止するためにBroadcastReceiver#3によってキャッチされる「その通知をわざわざ投稿しない」インテントを送信できます。ただし、Androidでは1つのBroadcastReceiverが別のBroadcastReceiverを登録できないため、これは機能しません。

4

1 に答える 1

0

使用したことはありませんが、動作するはずです。ブロードキャストクエリを送信する直前に、ブロードキャスト受信者がインテントを処理する準備ができているかどうか。

PackageManager pm = context.getPackageManager();
List<ResolveInfo>  mList = pm.queryBroadcastReceivers(intent, 0);

if(mList.size() > 0){
 //broadcast intent
}else{
 //post notification
}

編集:これはアクティビティを通じて登録された受信者では機能しないため、Applicationクラスを使用して登録と登録解除を追跡できます。同じアプリケーションとプロセスが使用されているため、ヘルパー機能を使用して登録と登録解除を行い、登録のカウントを保持し、通知を投稿するかインテントをブロードキャストするかを決定できます。

于 2012-09-15T20:56:36.733 に答える