2017-04-06 23 views
-1

所以我在android中學習BroadcastReceiver。 BroadcastReceivers基於觀察者設計模式(這使得它們非常有趣)。
所以我想要實現的是廣播我的消息,並在同一活動內我想收到消息(僅用於測試目的)。 這裏是代碼片段無法接收廣播在同一活動

Log.d("ABC", "sending"); 
    Intent intent = new Intent("com.yourcompany.testIntent"); 
    intent.putExtra("value", "test"); 
    sendBroadcast(intent); 



    Log.d("ABC", "sent"); 

    IntentFilter filter = new IntentFilter("com.yourcompany.testIntent"); 
    BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d("ABC","INSIDE "); 
      String value = intent.getExtras().getString("value"); 
     } 
    }; 

    Log.d("ABC", "receiving"); 
    registerReceiver(receiver, filter); 
    Log.d("ABC", "received"); 

這裏是調試輸出

04-06 20:40:52.446 20149-20149/com.example.illuminati.broadcastreceiver d/ABC:發送 04-06 20:40:52.447 20149-20149/com.example.illuminati.broadcastreceiver D/ABC:sent 04-06 20:40:52.448 20149-20149/com.example.illuminati.broadcastreceiver D/ABC:接收04-06 20:40:52.453 20149-20149/com.example.illuminati.broadcast接收器d/ABC:收到

爲什麼它沒有內部的onReceive得到()方法
缺少什麼我在這裏
任何幫助嗎?

回答

3

在註冊廣播接收機之前,您正在發送廣播消息。試着做下面的方式,它會工作:

IntentFilter filter = new IntentFilter("com.yourcompany.testIntent"); 
    BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d("ABC", "INSIDE "); 
      String value = intent.getExtras().getString("value"); 
     } 
    }; 
    registerReceiver(receiver, filter); 
    Intent intent = new Intent("com.yourcompany.testIntent"); 
    intent.putExtra("value", "test"); 
    sendBroadcast(intent); 
+0

這樣一個愚蠢的錯誤。我不能夠感謝你。非常感謝:) –

+0

不客氣,不斷學習! – AlexTa