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

所属分类: 软件编程 / Android 阅读数: 33
收藏 0 赞 0 分享

最近公司开发一个项目,要求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 byte[] 和short[]转换的方法代码

这篇文章主要介绍了android byte[] 和short[]转换的方法代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取应用程序大小的方法

这篇文章主要介绍了Android获取应用程序大小的方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android获取其他包的Context实例代码

这篇文章主要介绍了Android获取其他包的Context实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android放大镜的实现代码

这篇文章主要介绍了Android放大镜的实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android 读取Properties配置文件的小例子

这篇文章主要介绍了Android 读取Properties配置文件的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

Android通讯录开发之删除功能的实现方法

这篇文章主要介绍了Android通讯录开发之删除功能的实现方法,有需要的朋友可以参考一下
收藏 0 赞 0 分享

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享
查看更多