关于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缓存配置教程

