關(guān)于Android發(fā)送短信獲取送達(dá)報告的問題(推薦)
最近公司開發(fā)一個項(xiàng)目,要求app能夠發(fā)送短信并獲取送達(dá)報告。這本不是一個什么難題,實(shí)現(xiàn)這一功能的代碼一搜一大把,那么這么簡單的一個問題,為什么我要在這里提出來呢?那是因?yàn)槲以趯懘a的時候掉入了一個坑,而且這很可能發(fā)生在很多和我一樣粗心的朋友身上。先給大家分享一下當(dāng)初讓我掉進(jìn)坑里的代碼:
咋一看,好像這段代碼并沒有什么問題,但是在測試的時候發(fā)現(xiàn)無論發(fā)送多少條短信,每次都只能獲取第一條短息的送達(dá)報告??!這個問題當(dāng)時困擾了我很久,感覺自己明明沒有寫錯啊,為什么會出現(xiàn)這樣莫名其妙的問題呢?思索無果之后,我決定查看Android的api,這一看,果然發(fā)現(xiàn)了問題的所在。
PendingIntent.getBroadcast(Context context, int requestCode,Intent intent, int flags)這個方法中有四個參數(shù),在官方api中給這四個參數(shù)的定義如下:
官方文檔告訴我們,第一個參數(shù)context表示廣播運(yùn)行的環(huán)境,這個很好理解,在Android中activity、service、application等都是context的繼承類;第二個參數(shù)requestCode表示發(fā)送者自定義的一個請求碼;第三個參數(shù)intent用來定義廣播接收者;第四個參數(shù)flag用于控制未指明的意圖,并提供實(shí)際的發(fā)送情況。官方給出了5個值:FLAG_ONE_SHOT表示這個PendingIntent只能被執(zhí)行一次,在調(diào)用PendingIntent的send()方法后將會自動取消,之后再通過它發(fā)送的消息都將失敗,F(xiàn)LAG_NO_CREATE表示當(dāng)這個PendingIntent不存在時返回結(jié)果為null,F(xiàn)LAG_CANCEL_CURRENT表示當(dāng)有新的PendingIntent被創(chuàng)建時,當(dāng)前的PendingIntent將被取消,只需要intent中攜帶的參數(shù)發(fā)生改變,將會檢索一個新的PendingIntent,通過取消之前等待的pengdingIntent確保只有新的數(shù)據(jù)能夠啟動它。FLAG_UPDATE_CURRENT表示當(dāng)pengdingIntent存在時,將會保留它只是將他的intent中的參數(shù)替換。FLAG_IMMUTABLE表示這是一個不可變的PendingItent。當(dāng)然第四個參數(shù)flag也可以自定義。
這下就很容易理解,為什么我每次收到的都是第一條短信的送達(dá)報告了。在我的代碼中,PendingIntent.getBroadcast(Context context, int requestCode,Intent intent, int flags)第二個參數(shù)requestCode給了一個固定值,第四個參數(shù)flag給了一個自定義的值,導(dǎo)致了smsManager以為每次的PendingIntent是同一個,所以每次都返回第一條短信的送達(dá)報告。解決這個問題的方法就是:
1.如果flag自定義且保持不變,則每次請求的requestcode需要改變
2.如果requestCode保持不變且flag非自定義,則flag的值不能是FLAG_IMMUTABLE,FLAG_NO_CREATE
3.如果requestCode保持不變且flag自定義,則flag的值需要作出改變
以上所述是小編給大家介紹的關(guān)于Android發(fā)送短信獲取送達(dá)報告的問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
使用CMake構(gòu)建OpenCV項(xiàng)目過程解析
這篇文章主要介紹了使用CMake構(gòu)建OpenCV項(xiàng)目過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11詳解 Kotlin Reference Basic Types, String, Array and Imports
這篇文章主要介紹了詳解 Kotlin Reference Basic Types, String, Array and Imports的相關(guān)資料,需要的朋友可以參考下2017-06-06Android服務(wù)應(yīng)用ClockService實(shí)現(xiàn)鬧鐘功能
這篇文章主要為大家詳細(xì)介紹了Android服務(wù)應(yīng)用ClockService實(shí)現(xiàn)鬧鐘功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11Android調(diào)用系統(tǒng)圖片裁剪限定尺寸及7.0照相問題的解決方法
這篇文章主要介紹了Android調(diào)用系統(tǒng)圖片裁剪限定尺寸,及7.0照相問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07Android入門之使用SQLite內(nèi)嵌式數(shù)據(jù)庫詳解
Android內(nèi)帶SQLite內(nèi)嵌式數(shù)據(jù)庫了。這對于我們存儲一些更復(fù)雜的結(jié)構(gòu)化數(shù)據(jù)帶來了極大的便利。本文就來和大家聊聊具體的使用方法,希望對大家有所幫助2022-12-12Android BLE 藍(lán)牙開發(fā)之實(shí)現(xiàn)掃碼槍基于BLESSED開發(fā)
這篇文章主要介紹了Android BLE 藍(lán)牙開發(fā)之實(shí)現(xiàn)掃碼槍基于BLESSED開發(fā),示例代碼介紹了第三方庫BLESSED for Android的使用,需要的朋友可以參考下2022-03-03Android實(shí)現(xiàn)獲取未接來電和未讀短信數(shù)量的方法
這篇文章主要介紹了Android實(shí)現(xiàn)獲取未接來電和未讀短信數(shù)量的方法,是Android程序開發(fā)中非常常見的重要功能,需要的朋友可以參考下2014-08-08Android OKHttp框架的分發(fā)器與攔截器源碼刨析
okhttp是一個第三方類庫,用于android中請求網(wǎng)絡(luò)。這是一個開源項(xiàng)目,是安卓端最火熱的輕量級框架,由移動支付Square公司貢獻(xiàn)(該公司還貢獻(xiàn)了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient2022-11-11