關(guān)于Android發(fā)送短信獲取送達(dá)報(bào)告的問(wèn)題(推薦)-創(chuàng)新互聯(lián)

最近公司開(kāi)發(fā)一個(gè)項(xiàng)目,要求app能夠發(fā)送短信并獲取送達(dá)報(bào)告。這本不是一個(gè)什么難題,實(shí)現(xiàn)這一功能的代碼一搜一大把,那么這么簡(jiǎn)單的一個(gè)問(wèn)題,為什么我要在這里提出來(lái)呢?那是因?yàn)槲以趯?xiě)代碼的時(shí)候掉入了一個(gè)坑,而且這很可能發(fā)生在很多和我一樣粗心的朋友身上。先給大家分享一下當(dāng)初讓我掉進(jìn)坑里的代碼:

創(chuàng)新互聯(lián)建站主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、成都響應(yīng)式網(wǎng)站建設(shè)、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化、微網(wǎng)站、成都微信小程序等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等多方位專(zhuān)業(yè)化運(yùn)作于一體。

咋一看,好像這段代碼并沒(méi)有什么問(wèn)題,但是在測(cè)試的時(shí)候發(fā)現(xiàn)無(wú)論發(fā)送多少條短信,每次都只能獲取第一條短息的送達(dá)報(bào)告??!這個(gè)問(wèn)題當(dāng)時(shí)困擾了我很久,感覺(jué)自己明明沒(méi)有寫(xiě)錯(cuò)啊,為什么會(huì)出現(xiàn)這樣莫名其妙的問(wèn)題呢?思索無(wú)果之后,我決定查看Android的api,這一看,果然發(fā)現(xiàn)了問(wèn)題的所在。

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

官方文檔告訴我們,第一個(gè)參數(shù)context表示廣播運(yùn)行的環(huán)境,這個(gè)很好理解,在Android中activity、service、application等都是context的繼承類(lèi);第二個(gè)參數(shù)requestCode表示發(fā)送者自定義的一個(gè)請(qǐng)求碼;第三個(gè)參數(shù)intent用來(lái)定義廣播接收者;第四個(gè)參數(shù)flag用于控制未指明的意圖,并提供實(shí)際的發(fā)送情況。官方給出了5個(gè)值:FLAG_ONE_SHOT表示這個(gè)PendingIntent只能被執(zhí)行一次,在調(diào)用PendingIntent的send()方法后將會(huì)自動(dòng)取消,之后再通過(guò)它發(fā)送的消息都將失敗,F(xiàn)LAG_NO_CREATE表示當(dāng)這個(gè)PendingIntent不存在時(shí)返回結(jié)果為null,F(xiàn)LAG_CANCEL_CURRENT表示當(dāng)有新的PendingIntent被創(chuàng)建時(shí),當(dāng)前的PendingIntent將被取消,只需要intent中攜帶的參數(shù)發(fā)生改變,將會(huì)檢索一個(gè)新的PendingIntent,通過(guò)取消之前等待的pengdingIntent確保只有新的數(shù)據(jù)能夠啟動(dòng)它。FLAG_UPDATE_CURRENT表示當(dāng)pengdingIntent存在時(shí),將會(huì)保留它只是將他的intent中的參數(shù)替換。FLAG_IMMUTABLE表示這是一個(gè)不可變的PendingItent。當(dāng)然第四個(gè)參數(shù)flag也可以自定義。

這下就很容易理解,為什么我每次收到的都是第一條短信的送達(dá)報(bào)告了。在我的代碼中,PendingIntent.getBroadcast(Context context, int requestCode,Intent intent, int flags)第二個(gè)參數(shù)requestCode給了一個(gè)固定值,第四個(gè)參數(shù)flag給了一個(gè)自定義的值,導(dǎo)致了smsManager以為每次的PendingIntent是同一個(gè),所以每次都返回第一條短信的送達(dá)報(bào)告。解決這個(gè)問(wèn)題的方法就是:

1.如果flag自定義且保持不變,則每次請(qǐng)求的requestcode需要改變

2.如果requestCode保持不變且flag非自定義,則flag的值不能是FLAG_IMMUTABLE,FLAG_NO_CREATE

3.如果requestCode保持不變且flag自定義,則flag的值需要作出改變

以上所述是小編給大家介紹的關(guān)于Android發(fā)送短信獲取送達(dá)報(bào)告的問(wèn)題,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!

網(wǎng)頁(yè)題目:關(guān)于Android發(fā)送短信獲取送達(dá)報(bào)告的問(wèn)題(推薦)-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://bm7419.com/article36/ipgsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)