2

クラスの 1 つからブロードキャストを送信しています。

    // Sending broadcast from my db helper constructor
    public DBHelper(Context ctx){
    this.ctx = ctx;
    Intent intent = new Intent();
    intent.setAction("custom.alert.abc");
    intent.putExtra("key",77);ctx.sendBroadcast(intent);




    //registering the broadcast in one of my activities oncreate
     IntentFilter alaramfilter = new IntentFilter();
    alaramfilter.addAction("custom.alert.abc");
     registerReceiver(alarmreceiver, alaramfilter); 

    //and declaring it
    private final BroadcastReceiver alarmreceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
    System.out.println("Broadcast received inside on receive");
    final String action = intent.getAction();
    if(action.equals("custom.alert.abc")) {
        Log.d("CPSnippetMain","My custom broadcast called");
        try {
             System.out.println("Broadcast received");
         } catch (Exception e) {
            e.printStackTrace();
        }
   }
}
};

問題は、コンストラクターが呼び出され、ブロードキャストが送信されても​​、onreceive が呼び出されないことです。

どんな助けでも大歓迎です。

4

2 に答える 2

3

sendbroadcastあなたとあなたの順序registerが重要です。最初に登録してから、sendBroadcast を実行します。

于 2012-09-25T18:09:37.497 に答える
0

ボードキャストを登録する

private BroadcastReceiver receiver_;

@Overrride
public void onCreate(Bundle savedInstanceState){



 IntentFilter filter_data = new IntentFilter();
 filter_data .addAction("SOME_ACTION");


 receiver_= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
  //do something based on the intent's action
}
 }

 registerReceiver(receiver_, filter_data );

および破棄メソッドでの unregisterReceiver

unregisterReceiver(receiver_);

于 2012-09-25T18:27:44.800 に答える