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

阻斷傳播:

短信的刪除
以下是短信相關的協議
content://sms/inbox 收件箱
content://sms/sent 已發送
content://sms/draft 草稿
content://sms/outbox 發件箱
content://sms/failed 發送失敗
content://sms/queued 待發送列表
就拿收件箱為例實現短信的刪除代碼如下:
實現刪除短信中包含某一字段的短信:
public void deleteSMS(String smscontent) {
ContentResolver CR = getContentResolver();
try {
// 准備系統短信收信箱的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"));// 獲取信息內容
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());
}
}
根據最新的短信實現刪除信息(刪除的對象是聯系人而非短信)
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);
}
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android 仿QQ分組管理可拖動Item的ListView(附源碼)
趁著周一休息,更新一下博客。最近項目中使用到了分組管理,需要實現Listview的Item拖動處理。查略一下資料和借鑒了別人的代碼將功能實現了。現在整理一下代碼,方便自己
Android_自定義倒計時View
2016年08月01日新的一周開始了,一篇自定義倒計時View開啟了這周的篇章…國際慣例,效果圖如下;帶陰影帶指引點的倒計時View,不要被這下過嚇到,分析
基於android系統的加密文件系統設計
android開放性,使其快速發展、並給人們帶來便利,但也給個人信息安全帶來風險, 個人私密文件面臨著被窺視與竊取的風險,哈哈,特別是官員和明星尤其擔心!還有商務人士。
Android Span 架構介紹
?前幾天在微博上看到一個人評論Android Span機制相當強大,有必要細心研究一下,於是就google了一下,發現了一篇很好的文章Spans, a Powerful