2012-02-14 3 views
0

Я звоню этот метод, когда кнопка посыла щелкнула Я получаю эту ошибкуОшибки в радиовещательном приемнике при отправке смс

java.lang.IllegalArgumentException: Получатель не зарегистрирован:

и ошибка показывает, когда приемник регистрации вещания на unregisterReceiver(new BroadcastReceiver() {}

private void sendSMS(String edittextSmsNumber, String msg) { 

    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
      SENT), 0); 

    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
      new Intent(DELIVERED), 0); 

    registerReceiver(new BroadcastReceiver() { 
     public void onReceive(Context arg0, Intent arg1) { 

      switch (getResultCode()) { 
      case Activity.RESULT_OK: 
       Toast.makeText(getBaseContext(), "SMS sent", 
         Toast.LENGTH_SHORT).show(); 
       /* base64msgString = Base64.encodeToString(
         encryptedText, 0);*/ 
       if (senderinfo != null && timeStamp != 0 
         && msgString != null) { 
        System.out.println("entered into database"); 
        outboxDatabase.open(); 
        outboxDatabase.insertintoOutbox(base64msgString, key, 
          savedPhoneno, timeStamp); 
        outboxDatabase.close(); 
       } 

       Intent homeScreenIntent = new Intent(); 
       homeScreenIntent.setClass(getApplicationContext(), 
         HomeScreen.class); 
       startActivity(homeScreenIntent); 
       finish(); 

       break; 
      case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
       Toast.makeText(getBaseContext(), "Generic failure", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NO_SERVICE: 
       Toast.makeText(getBaseContext(), "No service", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_NULL_PDU: 
       Toast.makeText(getBaseContext(), "Null PDU", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case SmsManager.RESULT_ERROR_RADIO_OFF: 
       Toast.makeText(getBaseContext(), "Radio off", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      } 

     } 

    }, new IntentFilter(SENT)); 
    registerReceiver(new BroadcastReceiver() { 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) { 
      case Activity.RESULT_OK: 
       Toast.makeText(getBaseContext(), "SMS delivered", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      case Activity.RESULT_CANCELED: 
       Toast.makeText(getBaseContext(), "SMS not delivered", 
         Toast.LENGTH_SHORT).show(); 
       break; 
      } 

     } 
    }, new IntentFilter(DELIVERED)); 

    SmsManager sms = SmsManager.getDefault(); 
    // short port = 8888; 

    sms.sendTextMessage(edittextSmsNumber, null, msg, 
      sentPI, deliveredPI); 

    try { 
     unregisterReceiver(new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       // TODO Auto-generated method stub 
       context.unregisterReceiver(this); 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

ответ

0

ошибка говорит то, что происходит, - ты сделаешь g, чтобы отменить регистрацию нового получателя, который еще не зарегистрирован.

Вы должны определить свои приемники как члены вашего класса, заменив ваши динамические экземпляры. А ведь звоните unregisterReceiver на каждом из ваших приемников.

Я думаю, что он исправит это.