`
JasonShieh
  • 浏览: 522619 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android的短信会话操作的较好实现方式

阅读更多
    经过一段时间的尝试与研究发现,Android系统的会话Uri并不令人满意,Thread和Conversation下的CONTENT_URI联合查询倒是可以查询出部分会话的完整信息,但仍可能遗漏掉一些会话。看到其他网友的做法很不错,利用短信会话的thread_id来进行查询等操作,确实可以达到一些主要的会话操作功能。值得推荐一下。
分享到:
评论
4 楼 JasonShieh 2011-01-13  
zhq56030207 写道
还是没有解决~~~

下面是com.android.providers.telephony.MmsSmsProvider这个类的删除操作源码,注意:
 if (affectedRows > 0) {
            context.getContentResolver().notifyChange(MmsSms.CONTENT_URI, null);
        }
这一句,希望对你有帮助:MmsSms.CONTENT_URI的值为:Uri.parse("content://mms-sms")

    @Override
    public int delete(Uri uri, String selection,
            String[] selectionArgs) {
        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
        Context context = getContext();
        int affectedRows = 0;

        switch(URI_MATCHER.match(uri)) {
            case URI_CONVERSATIONS_MESSAGES:
                long threadId;
                try {
                    threadId = Long.parseLong(uri.getLastPathSegment());
                } catch (NumberFormatException e) {
                    Log.e(LOG_TAG, "Thread ID must be a long.");
                    break;
                }
                affectedRows = deleteConversation(uri, selection, selectionArgs);
                MmsSmsDatabaseHelper.updateThread(db, threadId);
                break;
            case URI_CONVERSATIONS:
                affectedRows = MmsProvider.deleteMessages(context, db,
                                        selection, selectionArgs, uri)
                        + db.delete("sms", selection, selectionArgs);
                // Intentionally don't pass the selection variable to updateAllThreads.
                // When we pass in "locked=0" there, the thread will get excluded from
                // the selection and not get updated.
                MmsSmsDatabaseHelper.updateAllThreads(db, null, null);
                break;
            case URI_OBSOLETE_THREADS:
                affectedRows = db.delete("threads",
                        "_id NOT IN (SELECT DISTINCT thread_id FROM sms " +
                        "UNION SELECT DISTINCT thread_id FROM pdu)", null);
                break;
            default:
                throw new UnsupportedOperationException(NO_DELETES_INSERTS_OR_UPDATES);
        }

        if (affectedRows > 0) {
            context.getContentResolver().notifyChange(MmsSms.CONTENT_URI, null);
        }
        return affectedRows;
    }
3 楼 zhq56030207 2010-12-31  
还是没有解决~~~
2 楼 JasonShieh 2010-12-09  
同时监听短信的URI和会话的URI试试看。你只监听了短信的URI有可能导致这个问题。具体你看系统的会话ContentProvider里的监听方式,跟短信URI的监听提供方式有没有联系
1 楼 zhq56030207 2010-12-08  
hello,我想问一下,我做了一个同步显示短信内容和数目的程序,我的程序中要收集短信的条数,如果逐条的删除,则我的程序会同步更新短信的条数,但是当我用删除整个会话的操作后,短信的条数得不到同步的更新,
我想问一下,这两种操作方式有什么区别呢?
[url]
http://www.eoeandroid.com/redirect.php?tid=49122&goto=lastpost&from=fastpost&random=0.21679852020274903#lastpost[/url]
希望你能帮忙解答,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics