1

私が実装MyBroadcastReceiverクラスを持っている、と私は、ランタイム内の1つの放送受信機を登録してみました:登録放送局の何が問題なのですか?

String MY_ACTION = "DUMMY"; 
MyBroadcastReceiver receiver = new MyBroadcastReceiver(); 
IntentFilter intentFilter = new IntentFilter(MY_ACTION); 
Log.i(TAG, "intentFilter: " + intentFilter.getAction(0)); 
Intent intent = context.registerReceiver(receiver, intentFilter); 
Log.i(TAG, "intent returned after registering:" + intent); 
Intent queryIntent = new Intent(MY_ACTION); 
PackageManager pm = context.getPackageManager(); 
List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0); 
Log.i(TAG, "list of receivers:" + resolveInfos.toString()); 

私はadbのシェルから放送を走った:

am broadcast \ 
-n com.foo.foo.foo/.MyBroadcastReceiver \ 
-a DUMMY 

私はまた、いくつかのログを持っています。私のonReceive()(MyBroadcastレシーバーの内部で実装されています)。

public class MyBroadcastReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.i(TAG, "in Broadcasting Receiver anyway"); 
    if (intent != null) { 
    ... 
    } 
} 

}

結果は:

  • intentFilter.getActionのログ登録私は
  • ヌルを与えた後(0)右作用
  • を意図のログを与えますログから空の受信者リストを取得しました。
  • そしてonReceiveが入力されていない(ログから私は を見ることができる)私は私のレジスタ部との多少の誤差があると思います

? ヒント/アドバイスは高く評価されます!

答えて

0

このコード:それは唯一の "スティッキー" の放送を返すため

Intent intent = context.registerReceiver(receiver, intentFilter); 

nullを返します。これは正しいです、あなたは "粘着性の"放送を送信していません。

このコード:このコードは唯一<receiver>タグとマニフェストに登録されているBroadcastReceiver秒を返し、動的に登録BroadcastReceiverのために何を返さない、どのあなたのため

List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(queryIntent, 0); 

は空のリストを返す必要がありますMyBroadcastReceiverです。

onReceive()が呼び出されなかった理由はわかりません。 MyBroadcastReceiverコードを投稿してください。私は何も明白ではない。代わりに、このADBコマンドを試みることができる:

Intent queryIntent = new Intent(MY_ACTION); 

をして、これはあなたのonReceive()を呼び出すかどうかを確認:

am broadcast -a DUMMY 

ます。また、このコードの後

sendBroadcast(queryIntent); 

を追加してみてください。

+0

ありがとうございました。 MyBroadcastReceiverのコードで質問を更新しました。 –

+0

私の答えの最後に別のアイデアを追加しました。また、あなたのコード 'context.registerReceiver()'に 'context'とは何ですか?あなたはこれを 'アクティビティ'や 'サービス'から呼び出すのですか? –

+0

コンテキストは、context.getApplicationContext()を使用して取得し、ループします。 –

関連する問題