2011-08-15 9 views
5

Więc to jest mój BroadcastReceiverJak mogę wysłać SMS z BroadcastReceiver i sprawdzić jego status?

public class IncomingSMSListener extends BroadcastReceiver { 
private static final String SMS_EXTRA_NAME = "pdus"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    SmsMessage[] messages = fetchSMSMessagesFromIntent(intent); 
} 

private SmsMessage[] fetchSMSMessagesFromIntent(Intent intent) { 
    ArrayList<SmsMessage> receivedMessages = new ArrayList<SmsMessage>(); 
    Object[] messages = (Object[]) intent.getExtras().get(SMS_EXTRA_NAME); 
    for (Object message : messages) { 
     SmsMessage finalMessage = SmsMessage 
       .createFromPdu((byte[]) message); 
     receivedMessages.add(finalMessage); 
    } 
    return receivedMessages.toArray(new SmsMessage[0]); 
} 

}

mam być w stanie odczytać wiadomości przychodzące w porządku i wszystko, ale powiedzmy, stąd chcę przekazać wiadomość na inny numer telefonu i upewnij się, że został wysłany. Wiem, że mogę zrobić SmsManager.sendTextMessage(), ale jak skonfigurować część PendingIntent, aby otrzymać powiadomienie, czy SMS został wysłany, czy nie?

Odpowiedz

6

OK, skończyło się na znalezieniu rozwiązania. Ponieważ kontekst przekazany do metody onReceive() w BroadCastReceiver nie pozwala mi zarejestrować innych BroadcastReceivers, aby nasłuchiwać zdarzenia "message sent", w końcu uzyskałem uchwyt kontekstu aplikacji i wykonałem następujące czynności:

W BroadcastReceiver:

SmsManager smsManager = SmsManager.getDefault(); 
    Intent intent = new Intent(SENT_SMS_FLAG); 
    PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, 
      intent, 0); 
    SMSForwarderApp.getAppContext().registerReceiver(
      new MessageSentListener(), 
      new IntentFilter(SENT_SMS_FLAG)); 
    smsManager.sendTextMessage("Here goes the destination of the SMS", null, 
      "Here goes the content of the SMS", sentIntent, null); 

SENT_SMS_FLAG jest po prostu stały ciąg znaków, który jednoznacznie identyfikuje zamiar po prostu wykonane. Moja MessageSentListener wygląda następująco:

public class MessageSentListener extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    int resultCode = this.getResultCode(); 
    boolean successfullySent = resultCode == Activity.RESULT_OK; 
    //That boolean up there indicates the status of the message 
    SMSForwarderApp.getAppContext().unregisterReceiver(this); 
      //Notice how I get the app context again here and unregister this broadcast 
      //receiver to clear it from the system since it won't be used again 
} 

}

+0

Jeśli nie wyrejestrować MessageSentListener można zmierzyć się wiele wpisów, problem ja widokiem. Dziękuję Ci! –