Как я могу отправить SMS с BroadcastReceiver и проверить его статус? - PullRequest
5 голосов
/ 15 августа 2011

Так что это мой BroadcastReceiver

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]);
}

}

Я в состоянии прочитать входящее сообщение просто отлично и все, но, скажем, отсюда я хочу переслатьсообщение на другой номер телефона и убедитесь, что оно было отправлено.Я знаю, что могу сделать SmsManager.sendTextMessage(), но как настроить партию PendingIntent, чтобы получать уведомления о том, отправлено SMS или нет?

1 Ответ

6 голосов
/ 16 августа 2011

ОК, в итоге мы нашли решение.Поскольку контекст, передаваемый методу onReceive () в BroadCastReceiver, не позволяет мне зарегистрировать другие BroadcastReceivers для прослушивания события «message sent», я в итоге получил контроль над контекстом приложения и сделал следующее:

В 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 - это просто статическая строка, которая однозначно идентифицирует только что созданное мной намерение.Мой MessageSentListener выглядит так:

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
}

}

...