2012-02-11 3 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 или три раза), почему это?

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

Рекомендованный подход заключается в том, чтобы использовать только действия при отправке и на принимающей стороне, если фильтр принимает несколько действий, если это необходимо? Я добавил onreceive. Рекомендуемая практика - проверить действие, а не дополнительный «результат», который я сделал? –

1

Проверьте, правильно ли вы отменили регистрацию приемника, то есть на onDestroy(), иначе вы можете получить тот же Intent дважды.

Смежные вопросы