2013-05-22 2 views
0

Я создаю приложение, которое получает SMS и отправляет определенный номер. Я хочу получить отчет о состоянии (для отправки и доставки) внутри класса BroadcastReceiver.Как получить отчеты о доставке внутри BroadcastReceiver

Вот код для BroadcastReceiver:

public class SmsReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) {       

     Bundle extras = intent.getExtras(); 
     String messages = ""; 
     String number = "6999999999"; 

     if (extras != null) 
     { 
      // Get array data from SMS 
      Object[] smsExtra = (Object[]) extras.get("pdus"); // "pdus" is the key 

      for (int i=0; i<smsExtra.length; ++i) 
      {  
       // ------------------- SMS ------------------------------ 
       SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);    
       byte[] sms_body = null; 
       try { 
        sms_body = sms.getMessageBody().getBytes("UTF-8"); 
       } catch (UnsupportedEncodingException e2) { 
        // TODO Auto-generated catch block 
        e2.printStackTrace(); 
       } 
       String sms_address = sms.getOriginatingAddress(); 


       sendSMS(number, "2", context); 


      }// end for 
     }// end if         

    }//end onReceive 

Я нашел следующие строки кода для получения отчетов о доставке. Невозможно включить их в класс BroadcastReceiver, и я получаю ошибку на registerReceiver. Любая помощь ??

//---sends an SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message,final Context context) 
    {   
     String SENT = "SMS_SENT"; 
     String DELIVERED = "SMS_DELIVERED"; 

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

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

     //---when the SMS has been sent--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(context, "SMS sent", Toast.LENGTH_SHORT).show(); 
         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)); 

     //---when the SMS has been delivered--- 
     registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         Toast.makeText(context, "SMS delivered", Toast.LENGTH_SHORT).show(); 
         break; 
        case Activity.RESULT_CANCELED: 
         Toast.makeText(context, "SMS not delivered", Toast.LENGTH_SHORT).show(); 
         break;       
       } 
      } 
     }, new IntentFilter(DELIVERED));   

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
    } 
+0

Какую ошибку вы получаете? – codeMagic

+0

Метод registerReceiver (новый BroadcastReceiver() {}, IntentFilter) не определен для типа SmsReceiver – Nikitas

+0

, вы используете фрагменты? разместите код, в котором вы регистрируете приемник – stinepike

ответ

0

Я нашел решение, просто взял registerReceiver из контекста

//---when the SMS has been sent--- 
     context.registerReceiver(new BroadcastReceiver(){ 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) 
       { 
        case Activity.RESULT_OK: 
         if (flag_sent == 0){  
.. 
}      
Смежные вопросы