0

我正在嘗試從服務通信/更新UI到活動。我收到的廣播不是我發送的。任何想法爲什麼?使用廣播/意圖在服務和活動之間進行通信

服務代碼:

@Override 
    //binder returns NULL 

    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 
     Intent i = new Intent(); 
    i.putExtra("lol", "haha"); 
     i.setAction(MYACTION); 
     sendBroadcast(i); 

活動代碼:

protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     IntentFilter intentFilter = new IntentFilter(MYACTION); 
      registerReceiver(recv, intentFilter); 
    } 

    BroadcastReceiver recv = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // TODO Auto-generated method stub 
       Intent getintent = getIntent(); 
String action = getintent.getAction(); 
//ACTION RECEIVED IS DIFFERENT FROM MYACTION. IT IS ACTION.MAIN 

// VALUE RECEIVED IS NULL 
       String val = getintent.getStringExtra("lol"); 
       } 

我還沒有註冊的接收器清單。有必要嗎?

正如在評論中提到的:我沒有在廣播接收器中收到相同的操作,而來自intent的值爲NULL。

我在做什麼錯?

感謝您的幫助。

回答

4

你不需要使用getIntent,因爲它轉化爲活動的意圖,沒有收到廣播的意圖。所以在你的情況下,你只需要使用intent這是指廣播的意圖。並且確保在從包中讀取所需值之前確實進行了檢查,因爲可能有可能首先獲得另一個廣播,其中包含lol

在廣播接收機

所以,像這樣做:

.... 
String val = getintent.getStringExtra("lol"); 

if(val.equals("your_action_string"){ 
    String val = intent.getStringExtra("lol"); //getIntent() replaced by intent 
} 
.... 

附:不,你不需要註冊任何廣播接收器,因爲它是以編程方式創建和使用的。

+0

太棒了,謝謝。有效。 –

相關問題