android - 如何从 BroadcastReceiver 发送短信并检查其状态?

标签 android sms broadcastreceiver android-pendingintent

所以这是我的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 是否已发送时收到通知?

最佳答案

好的,最终找到了解决方案。由于传入 BroadCastReceiver 中的 onReceive() 方法的上下文不允许我注册其他 BroadcastReceivers 来监听“消息已发送”事件,因此我最终掌握了应用程序上下文并执行以下操作:

在广播接收器中:

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 只是一个静态字符串,可以唯一标识我刚刚发出的 Intent 。我的 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
}

关于android - 如何从 BroadcastReceiver 发送短信并检查其状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061321/

相关文章:

android - 在 android studio 中打开新工作区

android - 错误 : <item> tag requires a 'drawable' attribute or child tag defining a drawable

java - 我如何使用短信调用我的页面?

android - 从广播接收器获取 SMS ID

c++ - 无法使用 AT 命令发送短信

android - 一段时间后服务停止工作。需要连续工作

android - list 合并因多个错误而失败

android phonegap CSS 问题

android - 在 android Oreo 中对传入的 SMS 运行服务

android - 屏幕关闭时从 BroadcastReceiver 打开 Activity