Android項(xiàng)目實(shí)現(xiàn)短信的發(fā)送、接收和對(duì)短信進(jìn)行攔截
說實(shí)話,關(guān)于Android中對(duì)短信的一些相關(guān)操作是一個(gè)比較入門的東西。那我現(xiàn)在還要來寫這一篇博客的原因只是因?yàn)楝F(xiàn)在開發(fā)中有相關(guān)內(nèi)容,而又想將這些東西分享給更多的人來學(xué)習(xí),同時(shí)在以后對(duì)Android系統(tǒng)的短信進(jìn)行其他學(xué)習(xí)的時(shí)候也就放在這里做一個(gè)記錄了,于是就寫了這篇啰嗦的文章。如果你覺得這是一個(gè)不錯(cuò)的東西,歡迎收藏,以便在以后更方便地查看本人在此篇文章中更新的內(nèi)容。下面我就從標(biāo)題中的三個(gè)方面來對(duì)Android系統(tǒng)中的短信操作進(jìn)行一個(gè)簡(jiǎn)單地學(xué)習(xí)。
短信的發(fā)送
由于Android中對(duì)短信發(fā)送方法的優(yōu)良封裝,之后對(duì)發(fā)送短信的開發(fā)就顯得異常的簡(jiǎn)單了。
public static void sendMessage(Context context, String content, String phoneNumber) { SmsManager sms = SmsManager.getDefault(); PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent(), 0); sms.sendTextMessage(phoneNumber, null, content, pi, null); }
別忘了還有權(quán)限問題:
<uses-permission android:name="android.permission.SEND_SMS" />
短信的接收
對(duì)于短信息的接收相對(duì)來說會(huì)復(fù)雜一些。而復(fù)雜的原因大家也應(yīng)該比較容易理解——接收是不可控制的。也就是說我們的手機(jī)根本不知道什么時(shí)候會(huì)有一條短信息過來。由于過于被動(dòng),Android的機(jī)制中就出現(xiàn)了一個(gè)強(qiáng)大到讓你佩服的東西,那就是廣播接收者。我們注冊(cè)一個(gè)廣播接收者,然后讓這個(gè)廣播接收者時(shí)時(shí)刻刻地去監(jiān)聽短信息是否到達(dá)的這一事件。就這樣,被動(dòng)觸發(fā)事件完美地解決了。下面讓我們來看看這個(gè)過程:
public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) { Bundle bundle = intent.getExtras(); Object messages[] = (Object[]) bundle.get("pdus"); SmsMessage smsMessage[] = new SmsMessage[messages.length]; for (int n = 0; n < messages.length; n++) { smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); } showToast(context, "短信內(nèi)容: " + smsMessage[0].getMessageBody()); } }
添加權(quán)限:
<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" />
以及在manifest中進(jìn)行一個(gè)靜態(tài)注冊(cè):
<receiver android:name=".broadcast.SMSReceiver" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
短信的攔截
在能夠接收短信的基礎(chǔ)上做一個(gè)短信攔截倒是簡(jiǎn)單了許多。因?yàn)槟軌蚪邮眨晕抑灰蔀榈谝粋€(gè)接收的人,并把接收到的短信不再向下傳播,這就完成了短信息的攔截了。
提高優(yōu)先權(quán):
阻斷傳播:
短信的刪除
以下是短信相關(guān)的協(xié)議
content://sms/inbox 收件箱
content://sms/sent 已發(fā)送
content://sms/draft 草稿
content://sms/outbox 發(fā)件箱
content://sms/failed 發(fā)送失敗
content://sms/queued 待發(fā)送列表
就拿收件箱為例實(shí)現(xiàn)短信的刪除代碼如下:
實(shí)現(xiàn)刪除短信中包含某一字段的短信:
public void deleteSMS(String smscontent) { ContentResolver CR = getContentResolver(); try { // 準(zhǔn)備系統(tǒng)短信收信箱的uri地址 Uri uri = Uri.parse("content://sms/inbox"); // 查詢收信箱里所有的短信 Cursor cursor = CR.query(uri, new String[] { "_id", "address", "person", "body", "date", "type" }, null, null, null); int count = cursor.getCount(); if (count > 0) { while (cursor.moveToNext()) { String body = cursor.getString(cursor.getColumnIndex("body"));// 獲取信息內(nèi)容 if (body.contains(smscontent)) { int id = cursor.getInt(cursor.getColumnIndex("_id")); CR.delete(Uri.parse("content://sms"), "_id=" + id, null); } } } } catch (Exception e) { Log.v("e", e.getMessage()); } }
根據(jù)最新的短信實(shí)現(xiàn)刪除信息(刪除的對(duì)象是聯(lián)系人而非短信)
public void deleteSMS() { ContentResolver CR = getContentResolver(); // 查詢收信箱里所有的短信 Cursor cursor = CR.query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id" }, null, null, null); if (cursor != null) { cursor.moveToFirst(); int a = cursor.getCount(); int b = cursor.getColumnCount(); long threadId = cursor.getLong(1); CR.delete(Uri.parse("content://sms/conversations/" + threadId), null, null); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android 實(shí)現(xiàn)獲取手機(jī)里面的所有圖片詳解及實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)獲取手機(jī)里面的所有圖片詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05Kotlin標(biāo)準(zhǔn)庫(kù)函數(shù)使用分析及介紹
Kotlin提供了一個(gè)系統(tǒng)庫(kù),是Java庫(kù)的增強(qiáng)。其中有很多函數(shù)在適配了Java的類型和方法同時(shí)使用Kotlin的語(yǔ)法。其中一些底層的函數(shù) 是使用比較廣泛的2022-09-09Flutter?DateTime獲取本月的開始時(shí)間與結(jié)束時(shí)間方法
這篇文章主要為大家介紹了Flutter?DateTime獲取本月的開始時(shí)間與結(jié)束時(shí)間方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2023-05-05Android漲姿勢(shì)知識(shí)點(diǎn)之你沒用過的BadgeDrawable
現(xiàn)在Android中有許多的應(yīng)用仿蘋果的在應(yīng)用圖標(biāo)上顯示小紅點(diǎn),下面這篇文章主要給大家介紹了關(guān)于Android漲姿勢(shì)知識(shí)點(diǎn)之你沒用過的BadgeDrawable的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09Android自定義控件實(shí)現(xiàn)邊緣凹凸的卡劵效果
這篇文章主要介紹了Android自定義控件實(shí)現(xiàn)邊緣凹凸的卡劵效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07android6.0運(yùn)行時(shí)權(quán)限完美封裝方法
今天小編就為大家分享一篇android6.0運(yùn)行時(shí)權(quán)限完美封裝方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Android中多個(gè)EditText輸入效果的解決方式
這篇文章主要給大家介紹了關(guān)于Android中多個(gè)EditText輸入效果的解決方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Android客戶端實(shí)現(xiàn)注冊(cè)、登錄詳解(1)
這篇文章主要為大家詳細(xì)介紹了Android客戶端實(shí)現(xiàn)注冊(cè)、登錄代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09