中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Android發送短信獲取送達報告的問題(推薦)

發布時間:2020-09-25 08:43:55 來源:腳本之家 閱讀:190 作者:easy_girl 欄目:移動開發

最近公司開發一個項目,要求app能夠發送短信并獲取送達報告。這本不是一個什么難題,實現這一功能的代碼一搜一大把,那么這么簡單的一個問題,為什么我要在這里提出來呢?那是因為我在寫代碼的時候掉入了一個坑,而且這很可能發生在很多和我一樣粗心的朋友身上。先給大家分享一下當初讓我掉進坑里的代碼:

關于Android發送短信獲取送達報告的問題(推薦)

咋一看,好像這段代碼并沒有什么問題,但是在測試的時候發現無論發送多少條短信,每次都只能獲取第一條短息的送達報告!!這個問題當時困擾了我很久,感覺自己明明沒有寫錯啊,為什么會出現這樣莫名其妙的問題呢?思索無果之后,我決定查看Android的api,這一看,果然發現了問題的所在。

PendingIntent.getBroadcast(Context context, int requestCode,Intent intent, int flags)這個方法中有四個參數,在官方api中給這四個參數的定義如下:

關于Android發送短信獲取送達報告的問題(推薦)

官方文檔告訴我們,第一個參數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發送短信獲取送達報告的問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿鲁科尔沁旗| 大邑县| 柳林县| 屯留县| 区。| 德阳市| 庆云县| 木兰县| 汉中市| 沅陵县| 长丰县| 仲巴县| 广平县| 虞城县| 宜君县| 外汇| 莒南县| 措美县| 镇安县| 赤城县| 东辽县| 靖江市| 富锦市| 诏安县| 明水县| 通辽市| 西青区| 昭通市| 江北区| 宁都县| 东港市| 阿瓦提县| 甘南县| 平定县| 大庆市| 汕头市| 富锦市| 阳东县| 迁安市| 泌阳县| 报价|