サービスからアクティビティにブロードキャストを送信しようとしています。ブロードキャストがサービス内から送信されていることを確認できますが、アクティビティは何も取得しません。
関連するサービスコードは次のとおりです。
Intent i = new Intent(NEW_MESSAGE);
i.putExtra(FriendInfo.USERNAME, StringUtils.parseBareAddress(message.getFrom()));
i.putExtra(FriendInfo.MESSAGE, message.getBody());
i.putExtra("who", "1");
sendBroadcast(i);
そして、アクティビティクラスの受信側:
public class newMessage extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if(action.equalsIgnoreCase(IMService.NEW_MESSAGE)){
Bundle extra = intent.getExtras();
String username = extra.getString(FriendInfo.USERNAME);
String message = extra.getString(FriendInfo.MESSAGE);
String who = extra.getString("who");
}
}
}
BroadcastReceiverは、アクティビティ内で定義されます。マニフェストファイルではなく、アクティビティのonCreateメソッドにレシーバーを登録しています。
なぜそれが記録されないのか私は困惑しています。何でも。
何か洞察はありますか?
編集
登録は次のように行われます。
registerReceiver(messageReceiver, new IntentFilter(IMService.NEW_MESSAGE));
「messageReceiver」が次のように定義されている場合
private newMessage messageReceiver = new newMessage();
IMService.NEW_MESSAGEは単なる文字列= "NewMessage"です
セットアップに固有なのか、それとも一般的な修正なのかはわかりませんが、register/unregister
をonResume/onPause
_respectively_
に移動し、onCreate
に登録していません。私にとっての問題。
この2つのことを試してください:
内部クラスのブロードキャストレシーバーはブロードキャストを処理できません(つまり、そのクラスを見つけることができません)。だから別のクラスとしてそれを作る
間違いなく動作します。