Android項目實現(xiàn)短信的發(fā)送、接收和對短信進行攔截
說實話,關于Android中對短信的一些相關操作是一個比較入門的東西。那我現(xiàn)在還要來寫這一篇博客的原因只是因為現(xiàn)在開發(fā)中有相關內(nèi)容,而又想將這些東西分享給更多的人來學習,同時在以后對Android系統(tǒng)的短信進行其他學習的時候也就放在這里做一個記錄了,于是就寫了這篇啰嗦的文章。如果你覺得這是一個不錯的東西,歡迎收藏,以便在以后更方便地查看本人在此篇文章中更新的內(nèi)容。下面我就從標題中的三個方面來對Android系統(tǒng)中的短信操作進行一個簡單地學習。
短信的發(fā)送
由于Android中對短信發(fā)送方法的優(yōu)良封裝,之后對發(fā)送短信的開發(fā)就顯得異常的簡單了。
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" />
短信的接收
對于短信息的接收相對來說會復雜一些。而復雜的原因大家也應該比較容易理解——接收是不可控制的。也就是說我們的手機根本不知道什么時候會有一條短信息過來。由于過于被動,Android的機制中就出現(xiàn)了一個強大到讓你佩服的東西,那就是廣播接收者。我們注冊一個廣播接收者,然后讓這個廣播接收者時時刻刻地去監(jiān)聽短信息是否到達的這一事件。就這樣,被動觸發(fā)事件完美地解決了。下面讓我們來看看這個過程:
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中進行一個靜態(tài)注冊:
<receiver android:name=".broadcast.SMSReceiver" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
短信的攔截
在能夠接收短信的基礎上做一個短信攔截倒是簡單了許多。因為能夠接收,所以我只要成為第一個接收的人,并把接收到的短信不再向下傳播,這就完成了短信息的攔截了。
提高優(yōu)先權(quán):

阻斷傳播:

短信的刪除
以下是短信相關的協(xié)議
content://sms/inbox 收件箱
content://sms/sent 已發(fā)送
content://sms/draft 草稿
content://sms/outbox 發(fā)件箱
content://sms/failed 發(fā)送失敗
content://sms/queued 待發(fā)送列表
就拿收件箱為例實現(xiàn)短信的刪除代碼如下:
實現(xiàn)刪除短信中包含某一字段的短信:
public void deleteSMS(String smscontent) {
ContentResolver CR = getContentResolver();
try {
// 準備系統(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ù)最新的短信實現(xiàn)刪除信息(刪除的對象是聯(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);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
詳解Android——藍牙技術(shù) 帶你實現(xiàn)終端間數(shù)據(jù)傳輸
藍牙技術(shù)在智能硬件方面有很多用武之地,本篇文章主要介紹了Android——藍牙技術(shù),實現(xiàn)兩個終端間數(shù)據(jù)的傳輸,有興趣的朋友可以了解一下。2016-12-12
關于AndroidStudio R文件莫名其妙缺失的快速解決方法
下面小編就為大家?guī)硪黄P于AndroidStudio R文件莫名其妙缺失的快速解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
Android中使用Gson解析JSON數(shù)據(jù)的兩種方法
Json是一種類似于XML的通用數(shù)據(jù)交換格式,具有比XML更高的傳輸效率;本文將介紹兩種方法解析JSON數(shù)據(jù),需要的朋友可以參考下2012-12-12
Android編程實現(xiàn)使用handler在子線程中更新UI示例
這篇文章主要介紹了Android編程實現(xiàn)使用handler在子線程中更新UI,涉及Android線程與界面布局相關操作技巧,需要的朋友可以參考下2017-09-09

