首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

关于android短信剔除的Uri

2012-09-12 
关于android短信删除的Uri短信主要用到sms表和threads表(其他忽略),按照理想流程,删除一条短信,有几步要操

关于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的短信删除掉了。!

热点排行