关于android短信删除的Uri
短信主要用到sms表和threads表(其他忽略),按照理想流程,删除一条短信,有几步要操作:
1.根据id删除sms表中一条指定短信,并查找出该短信对应的thread_id;
2.根据查找到的thread_id修改threads表中message_count字段的值;
3.可能还要根据某某字段修改其他某某表中的值。
但实际上在android中删除一条指定短信的写法很简单
getContentResolver().delete(Uri.parse("content://sms/sms_id"), null, null);其实android在TelephonyProvider中已经完成了这些操作,
com.android.providers.telephony.MmsSmsDatabaseHelper.java public static int deleteOneSms(SQLiteDatabase db, int message_id) { int thread_id = -1; // Find the thread ID that the specified SMS belongs to. Cursor c = db.query("sms", new String[] { "thread_id" }, "_id=" + message_id, null, null, null, null); if (c != null) { if (c.moveToFirst()) { thread_id = c.getInt(0); } c.close(); } // Delete the specified message. int rows = db.delete("sms", "_id=" + message_id, null); if (thread_id > 0) { // Update its thread. updateThread(db, thread_id); } return rows; }这个方法中完成了单条短信的删除操作,同时还做了以上那些相关联的事物,这个方法被调用的地方如下:
com.android.providers.telephony.SmsProvider.java@Override public int delete(Uri url, String where, String[] whereArgs) { int count; int match = sURLMatcher.match(url); SQLiteDatabase db = mOpenHelper.getWritableDatabase(); switch (match) { case SMS_ALL: count = db.delete(TABLE_SMS, where, whereArgs); if (count != 0) { // Don't update threads unless something changed. MmsSmsDatabaseHelper.updateAllThreads(db, where, whereArgs); } break; case SMS_ALL_ID: try { int message_id = Integer.parseInt(url.getPathSegments().get(0)); count = MmsSmsDatabaseHelper.deleteOneSms(db, message_id); } catch (Exception e) { throw new IllegalArgumentException( "Bad message id: " + url.getPathSegments().get(0)); } break; case SMS_CONVERSATIONS_ID: ....根据SMS_ALL_ID在URLMatcher类的的匹配关系既可知道删除短信的URI该怎么写了
private static final UriMatcher sURLMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { sURLMatcher.addURI("sms", null, SMS_ALL); sURLMatcher.addURI("sms", "#", SMS_ALL_ID); sURLMatcher.addURI("sms", "inbox", SMS_INBOX); sURLMatcher.addURI("sms", "inbox/#", SMS_INBOX_ID); sURLMatcher.addURI("sms", "sent", SMS_SENT); sURLMatcher.addURI("sms", "sent/#", SMS_SENT_ID); sURLMatcher.addURI("sms", "draft", SMS_DRAFT); sURLMatcher.addURI("sms", "draft/#", SMS_DRAFT_ID); sURLMatcher.addURI("sms", "outbox", SMS_OUTBOX); sURLMatcher.addURI("sms", "outbox/#", SMS_OUTBOX_ID); sURLMatcher.addURI("sms", "undelivered", SMS_UNDELIVERED); sURLMatcher.addURI("sms", "failed", SMS_FAILED); sURLMatcher.addURI("sms", "failed/#", SMS_FAILED_ID); sURLMatcher.addURI("sms", "queued", SMS_QUEUED); sURLMatcher.addURI("sms", "conversations", SMS_CONVERSATIONS); sURLMatcher.addURI("sms", "conversations/*", SMS_CONVERSATIONS_ID); sURLMatcher.addURI("sms", "raw", SMS_RAW_MESSAGE); sURLMatcher.addURI("sms", "attachments", SMS_ATTACHMENT); sURLMatcher.addURI("sms", "attachments/#", SMS_ATTACHMENT_ID); sURLMatcher.addURI("sms", "threadID", SMS_NEW_THREAD_ID); sURLMatcher.addURI("sms", "threadID/*", SMS_QUERY_THREAD_ID); sURLMatcher.addURI("sms", "status/#", SMS_STATUS_ID); sURLMatcher.addURI("sms", "sr_pending", SMS_STATUS_PENDING); sURLMatcher.addURI("sms", "icc", SMS_ALL_ICC); sURLMatcher.addURI("sms", "icc/#", SMS_ICC); //we keep these for not breaking old applications sURLMatcher.addURI("sms", "sim", SMS_ALL_ICC); sURLMatcher.addURI("sms", "sim/#", SMS_ICC); 1 楼 u200814499 2011-12-08 非常感谢。看完SIM的短信删除掉了。!