2013-05-17 3 views
2

Может кто подскажет, почему этот широковещательный приемник получает несколько намерений? Пример. Я отправил только один смс, но широковещательный приемник получил его несколько раз.Получение нежелательных множественных намерений на широковещательном приемнике

Я уже проверил на этой резьбе, но не повезло Getting multiple broadcasts from intents? BroadCastReceiver for Multiple sent Messages?

public void sendMultipart(String msgbody, String msg_receipients, Intent intent) 
{ 
    Intent intentExtra = new Intent("SMS_SENT"); 

    intentExtra.putExtra("phoneNumber", msg_receipients); 
    intentExtra.putExtra("msgbody", msgbody); 

    PendingIntent sentPI = 
     PendingIntent.getBroadcast(MyApplication.getAppContext(), 
      smsID++, intentExtra, PendingIntent.FLAG_CANCEL_CURRENT); 

    BroadcastReceiver smsStatusReceiver = new BroadcastReceiver() 
    { 
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      String phoneNumber = intent.getStringExtra("phoneNumber"); 
      String message = intent.getStringExtra("message"); 

      int resultCode = getResultCode(); 

      switch (resultCode) 
      { 
       case Activity.RESULT_OK: 
        Logger.logtoFile(tag,"RESULT_OK "+phoneNumber,1); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Logger.logtoFile(tag,"RESULT_ERROR_GENERIC_FAILURE "+phoneNumber,1); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Logger.logtoFile(tag,"RESULT_ERROR_NO_SERVICE "+phoneNumber,1); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Logger.logtoFile(tag,"RESULT_ERROR_RADIO_OFF "+phoneNumber,1); 
        break; 
      } 
     } 
    }; 
    MyApplication.getAppContext().registerReceiver(smsStatusReceiver, new IntentFilter("SMS_SENT")); 

    try 
    { 
     SmsManager sms = SmsManager.getDefault(); 
     ArrayList<String> messages = sms.divideMessage(msgbody); //Divide msg into chunk 
     ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(); 
     sentIntents.add(sentPI); 
     for (int j = 0; j < messages.size(); j++) { 
      sentIntents.add(PendingIntent.getBroadcast(MyApplication.getAppContext(),0,intent, 0)); 
      sentIntents.add(null); 
     } 
     sms.sendMultipartTextMessage(msg_receipients, null, messages, sentIntents, null); 
    } catch(Exception l) { 
     Logger.logtoFile(tag, l.toString(), 2); 
    } 
} 

ответ

0

После я добавил строку для отмены регистрации моего BroadcastReceiver результата был точно таким же, пока я не модернизировал свой эмулятор Android 4.1.2. Похоже, что на Android 2.3.3 есть ошибка. Эта проблема теперь исправлена.

context.unregisterReceiver(this); 
0

У меня была аналогичная проблема с получением нескольких нежелательных передач.

В моем случае я зарегистрировал BroadcastReceiver в своей дочерней активности onCreate(), но никогда не регистрировал его, когда активность закрыта. Итак, когда моя родительская активность снова запустила дочернюю активность, произошла новая регистрация, и вместо 1 трансляции я получил 2,3 и так далее.

Проблема была решена путем помещения registerReceiver в onResume() и unregisterReceiver в onPause.

Кроме того, если вы используете LocalBroadcastManager.registerReceiver, не забудьте использовать LocalBroadcastManager.unregisterReceiver, а не только unregisterReceiver, или вы получите java.lang.IllegalArgumentException: Получатель не зарегистрирован

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