web-dev-qa-db-ja.com

Androidサービスからアクティビティへのブロードキャスト

サービスからアクティビティにブロードキャストを送信しようとしています。ブロードキャストがサービス内から送信されていることを確認できますが、アクティビティは何も取得しません。

関連するサービスコードは次のとおりです。

   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"です

16
Adam

セットアップに固有なのか、それとも一般的な修正なのかはわかりませんが、register/unregisteronResume/onPause_respectively_に移動し、onCreateに登録していません。私にとっての問題。

10
Adam

この2つのことを試してください:

  1. マニフェストファイルを使用して受信者を登録します(ただし、ほとんど役に立ちません)
  2. レシーバーを内部クラスではなく、通常のクラスにしてみてください。
1
Vladimir Ivanov

内部クラスのブロードキャストレシーバーはブロードキャストを処理できません(つまり、そのクラスを見つけることができません)。だから別のクラスとしてそれを作る

間違いなく動作します。

0
Tushar Bapte