当前位置: 首页 > 知识库问答 >
问题:

Android-短信发送意图没有收到100%的时间

雍志文
2023-03-14

我每天发送400多条短信,但只有大约95%的短信被发送到广播接收器。消息以5秒的间隔发送。

ArrayList<String> partsArray = SmsManager.getDefault().divideMessage(this.message);
ArrayList<PendingIntent> sentPendingIntents = new ArrayList<>(partsArray.size());
ArrayList<PendingIntent> deliveredPendingIntents = new ArrayList<>(partsArray.size());
      .....

for (int i = 0; i < partsArray.size(); i++) {
        sentIntent = new Intent("SMS_SENT_2");
        deliveredIntent = new Intent(C.SMS_DELIVERED);
        sentPI = PendingIntent.getBroadcast(context, 0,sentIntent, PendingIntent.FLAG_ONE_SHOT);
        deliveredPI = PendingIntent.getBroadcast(context, 0, deliveredIntent, PendingIntent.FLAG_ONE_SHOT);

        sentPendingIntents.add(sentPI);
        deliveredPendingIntents.add(deliveredPI);
}

SmsManager sms = SmsManager.getDefault();
sms.sendMultipartTextMessage(phoneNumber, null,partsArray, sentPendingIntents, deliveredPendingIntents);

以及舱单中的广播接收器:

<receiver android:name="._broadcastReceivers.SMSSentBroadcastReceiver">
        <intent-filter android:priority="999">
            <action android:name="SMS_SENT_2" />
        </intent-filter>
</receiver>

我知道事实上,对于一些消息,广播接收器没有得到目的,但短信实际上是发送的。

我如何可靠地确定短信是否“离开了电话”?

共有1个答案

长孙谦
2023-03-14

不要使用FLAG_ONE_SHOT,您应该确保PendingIntent是唯一的。最简单的方法是使用显式的Intent而不是隐式的Intent,并确保每个Intent中的ACTION是唯一的。下面是一个示例:

for (int i = 0; i < partsArray.size(); i++) {
    sentIntent = new Intent(this, _broadcastReceivers.SMSSentBroadcastReceiver.class);
    sentIntent.setAction("SMS_SENT_2" + System.currentTimeMillis());
    deliveredIntent = new Intent(this, DeliveryReceiver.class);
    deliveredIntent.setAction(C.SMS_DELIVERED + System.currentTimeMillis());
    sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0);
    deliveredPI = PendingIntent.getBroadcast(context, 0, deliveredIntent, 0);

    sentPendingIntents.add(sentPI);
    deliveredPendingIntents.add(deliveredPI);
}

我通过在每个动作后附加当前时间戳来确保动作是唯一的。

您现在可以删除<代码>

 类似资料:
  • 本文向大家介绍Android接收和发送短信处理,包括了Android接收和发送短信处理的使用技巧和注意事项,需要的朋友参考一下 关于短信接收处理方面,当前已经有一些app做的比较好了,比如发给手机发验证码验证的问题,很多app在手机接收到验证码后,不需要输入,就直接可以跳过验证界面,这就是用到了对接收到的短信的处理。至于短信的发送,也没什么好说的了。在此也只是附上一个小实例。 效果图: MainA

  • 我的应用程序通过SmsManager.sendMultipartTextMessage发送短信,然后通知服务器短信发送的状态。 一切正常,但Yota操作员有问题。短信不会发送到 MTS 运营商的手机。Yota运营商的员工声称MTS运营商阻止接收来自Yota的消息。 这不是我们的问题,但Android系统说,这样的短信成功交付。我们无法从其他手机重新发送此类短信,因为我们的系统认为它们已经成功发送。

  • 本文向大家介绍详解Android短信的发送和广播接收实现短信的监听,包括了详解Android短信的发送和广播接收实现短信的监听的使用技巧和注意事项,需要的朋友参考一下 本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml 发送短息

  • 本文向大家介绍Android BroadcastReceiver接收收到短信的广播,包括了Android BroadcastReceiver接收收到短信的广播的使用技巧和注意事项,需要的朋友参考一下 一、知识介绍   1、broadcastReceiver是广播接受者,四大组件之一。   2、Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息。   3、使用场景:  

  • 本文向大家介绍Android项目实现短信的发送、接收和对短信进行拦截,包括了Android项目实现短信的发送、接收和对短信进行拦截的使用技巧和注意事项,需要的朋友参考一下 说实话,关于Android中对短信的一些相关操作是一个比较入门的东西。那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Android系统的短信进行其他学习的时候也就

  • 问题内容: 伙计们,我对预定的短信有问题…在我使用的清单中 但我收到此错误…我不知道为什么…我向您展示我的LOGCAT: 以及有关接收方广播的代码: 这是我的清单: 谁能帮我?预先感谢大家! 问题答案: 步骤1 您的明示许可为 用更新 它 不是 权限拼写错误 第2步