微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐