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

发布时间 - 2026-01-11 00:21:00    点击率:

最近公司开发一个项目,要求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创建简单发送和接收短信应用  # Android开发中实现发送短信的小程序示例  # Android实现发送短信功能实例详解  # Android实现短信加密功能(发送加密短信、解密本地短信)  # 自定义  # 将会  # 都是  # 第一条  # 这一  # 给了  # 第二个  # 每次都  # 小编  # 我要  # 让我  # 在这里  # 很好  # 我在  # 出了  # 第一个  # 在此  # 和我  # 中有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: javascript事件捕获机制【深入分析IE和DOM中的事件模型】  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何用VPS主机快速搭建个人网站?  Linux系统命令中screen命令详解  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Android 常见的图片加载框架详细介绍  canvas 画布在主流浏览器中的尺寸限制详细介绍  EditPlus中的正则表达式 实战(2)  在线教育网站制作平台,山西立德教育官网?  JS实现鼠标移上去显示图片或微信二维码  如何快速启动建站代理加盟业务?  Laravel如何使用Blade组件和插槽?(Component代码示例)  高防服务器租用指南:配置选择与快速部署攻略  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  如何用y主机助手快速搭建网站?  如何选择PHP开源工具快速搭建网站?  如何在景安云服务器上绑定域名并配置虚拟主机?  微信小程序 require机制详解及实例代码  Laravel如何与Pusher实现实时通信?(WebSocket示例)  如何快速查询网站的真实建站时间?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  北京的网站制作公司有哪些,哪个视频网站最好?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  图册素材网站设计制作软件,图册的导出方式有几种?  如何为不同团队 ID 动态生成多个“认领值班”按钮  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何用免费手机建站系统零基础打造专业网站?  如何快速生成ASP一键建站模板并优化安全性?  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  实例解析Array和String方法  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  如何在阿里云服务器自主搭建网站?  如何在阿里云ECS服务器部署织梦CMS网站?  企业网站制作这些问题要关注  Laravel如何配置和使用缓存?(Redis代码示例)  黑客入侵网站服务器的常见手法有哪些?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程