2012-02-11 41 views
1

我用這樣的設置爲我的節目:防止接收廣播多次

IntentFilter filter = new IntentFilter("com.commonsware.cwac.tlv.demo.onlineDbResult"); 
    filter.addCategory(INTENT_CATEGORY); 
    ResultReceiver receiver= new ResultReceiver(); 
    registerReceiver(receiver, filter); 

而且調用接收器:

Intent resultIntent = new Intent("com.commonsware.cwac.tlv.demo.onlineDbResult"); 
     if(categories!=null){ 
      for(String category:categories){ 
       resultIntent.addCategory(category); 
       Log.d(TAG,"add category "+category); 
      } 
     } 

不知怎的,在這種方式中註冊的接收器接收的意圖多次(2或3次)這是爲什麼?

com.commonsware.cwac.tlv.demo是命名空間,onlineDbResult只是一個附加字符串,不是類或任何東西。

的的onReceive:

@Override 
     public void onReceive(Context context, Intent intent) { 
      Bundle extras = intent.getExtras(); 
      String result = extras.getString("result"); 
      Log.d("baby","Register received result "+result); 
      if(progressDialog!=null) 
       progressDialog.dismiss(); 
      if(result.equals("user_added")){ 
       do stuff 

回答

0

回想起來,我認爲我的問題可能是我混合了類別和操作。過濾器與分類和動作相匹配,並分別爲兩個原因捕獲了意圖,兩次觸發接收。但我不確定。爲了防止這種情況,請做出明智的決定,以便使用類別或操作

0

不知何故以這種方式登記的接收器接收的意圖多次(2個或三次)這是爲什麼?

要麼你註冊了多個接收器,要麼你廣播多個Intents

請注意,我不知道爲什麼你在用廣播混淆類別。類別主要用於活動。

+0

建議的方法是在發送時只使用動作,而在接收端使用過濾器接受多個動作(如果需要)? 我添加了收件人。建議的做法是測試行動而不是我做出的額外「結果」? – 2012-02-11 14:40:22

1

檢查您是否正確註銷接收方,即onDestroy(),否則您可能會收到兩次相同的Intent。