其他分享
首页 > 其他分享> > android – 尝试识别短信发送确认

android – 尝试识别短信发送确认

作者:互联网

我目前正在尝试获取每封已发送短信的确认信息.我需要确保我的短信发送,所以我使用BroadCastReceived来获取信息:

Intent sentIntent = new Intent(SMS_SEND);
    sentIntent.putExtra("key", idSms);
    PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(), 0, sentIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    SmsManager manager = SmsManager.getDefault();
    try{
        manager.sendTextMessage(exp, null, sms, sentPI, null);
        put("sending " + sms); //Just a method to print in a textview use has a console
    } catch (IllegalArgumentException e){
        put("Exception " + e.getMessage());
    }

并使用这样的广播接收器

public void onReceive(Context context, Intent intent){
        String idsms = intent.getExtras().getString("key");

        switch (getResultCode()) {
            case Activity.RESULT_OK:
                put("ACK : #" + idsms);

                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
            case SmsManager.RESULT_ERROR_RADIO_OFF:
            case SmsManager.RESULT_ERROR_NULL_PDU:
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                put("BOOM " + getResultCode() + "\n\tfrom sms #" + idsms);
                break;
        }
    }

这个工作就像一个魅力,直到我尝试同时发送多条消息,额外的接收始终是从最后一次短信发送,所以我无法识别哪些文本发送,哪些不发送.

这是一个简单的例子,说明会发生什么.

当我使用循环发送3sms时:

id : 1, message : SMS 1
id : 2, message : SMS 2
id : 3, message : SMS 3

收到的将获得:

ACK : #3
ACK : #3
ACK : #3

我知道这来自PendingIntent.FLAG_UPDATE_CURRENT,但我找不到解决方案.任何人都可以向我解释如何使用PendingIntent.getBroadcast(..)来管理这个或者至少让我走上正轨.

解决方法:

您的问题是由于PendingIntents可以被系统重用,如果有关请求的某些事情没有不同.在您的代码中,您传递的是FLAG_UPDATE_CURRENT,这会导致每次请求PendingIntent时更新存储的Intent及其附加内容.这就是为什么你得到每个消息的id:3.要纠正这个问题,您可以每次使用唯一的请求代码(第二个参数)调用getBroadcast(),这将为每个请求创建一个新的PendingIntent,每个请求都有一个单独的Intent及其自己的附加功能.

在您的情况下,修复应该很简单,假设每个消息的idSms是唯一的.

PendingIntent sentPI = PendingIntent.getBroadcast(getApplicationContext(),
                                                  Integer.parseInt(idSms),
                                                  sentIntent,
                                                  PendingIntent.FLAG_UPDATE_CURRENT);

标签:android,sms,android-intent,smsmanager
来源: https://codeday.me/bug/20191003/1848751.html