用過Android系統手機的朋友們相比都知道,AndroidOS的短信和iOS一樣,是以會話模式展現的,這種展現方式很容易讓使用者查找以前的聊天記錄。
關於用代碼刪除短信,其實刪除的也是對話,無論是最近的,還是以前的,統統都會一併刪除。
下面來看那代碼。
首先需要得到得到短信目錄。
ContentResolver cr;
cr = getContentResolver();
再有就是要遍歷下所有短信。
String SMS_READ_COLUMN = "read";
String WHERE_CONDITION = SMS_READ_COLUMN + " = 0";
String SORT_ORDER = "date DESC";
int count = 0;
Cursor cursor = cr.query(Uri.parse("content://sms/inbox"),
new String[] { "_id", "thread_id", "address", "person", "date",
"body" }, WHERE_CONDITION, null, SORT_ORDER);
if (cursor != null) {
try {
count = cursor.getCount();
if (count > 0) {
cursor.moveToFirst();
threadId = cursor.getLong(1);
}
} finally {
cursor.close();
}
}
"content://sms/inbox"就是短信的所在路徑,inbox,收件箱。
上述代碼可以得到最新的一條短信。
我們需要調用一下這個方法,我們可以把這個方法。
long id = getThreadId();
Uri mUri = Uri.parse("content://sms/conversations/" + id);
這樣就可以得到最新一跳短信的所對應的id了。最後刪除就可以了。
cr.delete(mUri, null, null);
別忘了在Manifest.xml中加入權限。
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
另外要強調的是,如果想要得到最新的收件箱信息,一定要重新獲得id;這裏的id永遠是0,但是如果直接把id用0代替,那麼刪除的就不是最新的了。
如果想刪除其他短信,只需要在遍歷的時候加上條件,讓返回的id是條件所對應的會話id就可以了,
還有一點要特別強調,這個方法只能刪除未讀的短信對話,因爲他的搜索條件是inbox,當然就是收件箱了;如果讀取了短信了,那麼Android系統就應該認定該信息不屬於收件箱了。