关于Android发送短信获取送达报告的问题(推荐)

 更新时间:2017年03月24日 14:17:39   作者:easy_girl  
最近公司开发一个项目,要求app能够发送短信并获取送达报告。实现代码非常简单的,下面小编给大家分享关于Android发送短信获取送达报告的问题,感兴趣的朋友一起看看吧

最近公司开发一个项目,要求app能够发送短信并获取送达报告。这本不是一个什么难题,实现这一功能的代码一搜一大把,那么这么简单的一个问题,为什么我要在这里提出来呢?那是因为我在写代码的时候掉入了一个坑,而且这很可能发生在很多和我一样粗心的朋友身上。先给大家分享一下当初让我掉进坑里的代码:

咋一看,好像这段代码并没有什么问题,但是在测试的时候发现无论发送多少条短信,每次都只能获取第一条短息的送达报告!!这个问题当时困扰了我很久,感觉自己明明没有写错啊,为什么会出现这样莫名其妙的问题呢?思索无果之后,我决定查看Android的api,这一看,果然发现了问题的所在。

PendingIntent.getBroadcast(Context context, int requestCode,Intent intent, int flags)这个方法中有四个参数,在官方api中给这四个参数的定义如下:

官方文档告诉我们,第一个参数context表示广播运行的环境,这个很好理解,在Android中activity、service、application等都是context的继承类;第二个参数requestCode表示发送者自定义的一个请求码;第三个参数intent用来定义广播接收者;第四个参数flag用于控制未指明的意图,并提供实际的发送情况。官方给出了5个值:FLAG_ONE_SHOT表示这个PendingIntent只能被执行一次,在调用PendingIntent的send()方法后将会自动取消,之后再通过它发送的消息都将失败,FLAG_NO_CREATE表示当这个PendingIntent不存在时返回结果为null,FLAG_CANCEL_CURRENT表示当有新的PendingIntent被创建时,当前的PendingIntent将被取消,只需要intent中携带的参数发生改变,将会检索一个新的PendingIntent,通过取消之前等待的pengdingIntent确保只有新的数据能够启动它。FLAG_UPDATE_CURRENT表示当pengdingIntent存在时,将会保留它只是将他的intent中的参数替换。FLAG_IMMUTABLE表示这是一个不可变的PendingItent。当然第四个参数flag也可以自定义。

这下就很容易理解,为什么我每次收到的都是第一条短信的送达报告了。在我的代码中,PendingIntent.getBroadcast(Context context, int requestCode,Intent intent, int flags)第二个参数requestCode给了一个固定值,第四个参数flag给了一个自定义的值,导致了smsManager以为每次的PendingIntent是同一个,所以每次都返回第一条短信的送达报告。解决这个问题的方法就是:

1.如果flag自定义且保持不变,则每次请求的requestcode需要改变

2.如果requestCode保持不变且flag非自定义,则flag的值不能是FLAG_IMMUTABLE,FLAG_NO_CREATE

3.如果requestCode保持不变且flag自定义,则flag的值需要作出改变

以上所述是小编给大家介绍的关于Android发送短信获取送达报告的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 创建子线程对Android进行网络访问

    创建子线程对Android进行网络访问

    这篇文章介绍了Android中创建子线程进行网络访问的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考
    2021-11-11
  • Android应用开发中触摸屏手势识别的实现方法解析

    Android应用开发中触摸屏手势识别的实现方法解析

    这篇文章主要介绍了Android应用开发中触摸屏手势识别的实现方法解析,深入的部分则是对左右手势的识别给出了相关编写思路,需要的朋友可以参考下
    2016-02-02
  • Android仿微信图片点击浏览的效果

    Android仿微信图片点击浏览的效果

    这篇文章主要为大家详细介绍了Android仿微信图片点击浏览的效果,Android 2D平滑放大显示ImageView,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android之仿美团加载数据帧动画

    Android之仿美团加载数据帧动画

    本文主要介绍了Android仿美团加载数据帧动画的实例方法。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Android组件之DrawerLayout实现抽屉菜单

    Android组件之DrawerLayout实现抽屉菜单

    DrawerLayout组件同样是V4包中的组件,也是直接继承于ViewGroup类,所以这个类也是一个容器类。接下来通过本文给大家介绍Android组件之DrawerLayout实现抽屉菜单,感兴趣的朋友一起学习吧
    2016-02-02
  • Android MessageQueue消息队列主要作用详解

    Android MessageQueue消息队列主要作用详解

    Android 消息机制主要指的是 Handler 的运行机制及其所依赖的 MessageQueue 和 Looper 的工作过程,Handler、MessageQueue、Looper组成一个相互联系的整体。本文先从 MessageQueue 的源码来说明其实现原理
    2023-02-02
  • 当Flutter遇到节流与防抖的思路和流程优化

    当Flutter遇到节流与防抖的思路和流程优化

    这篇文章主要给大家介绍了关于当Flutter遇到节流与防抖的思路和流程优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Android设备上非root的抓包实现方法(Tcpdump方法)

    Android设备上非root的抓包实现方法(Tcpdump方法)

    通常我们在Android应用中执行某个命令时会使用“Runtime.getRuntime().exec("命令路径")”这种方式,但是当我们执行抓包操作时,使用这条命令无论如何都不行,通过下面代码打印结果发现,该命令一定要在root权限下才能执行,具体实现思路,请参考本教程
    2016-11-11
  • Android编程之分辨率处理相关代码段合集

    Android编程之分辨率处理相关代码段合集

    这篇文章主要介绍了Android编程之分辨率处理相关代码段合集,涉及Android针对分辨率的计算与转换等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Android中ScrollView 滑到头部或尾部可伸缩放大效果

    Android中ScrollView 滑到头部或尾部可伸缩放大效果

    最近做项目遇到这样的需求S当crollView 滑动到顶部,不能在滑动的时候,图片可以下拉放大,松开又恢复,滑到底部没有内容的时候,也有伸缩效果,下面通过实例代码给大家介绍Android ScrollView 滑到头部或尾部可伸缩放大功能,一起学习吧
    2017-03-03

最新评论