区分所有短信的收件箱和sentsms

时间:2012-08-16 04:33:59

标签: android android-contentprovider

我正在开发一个ANdroid应用程序。在我的应用程序中,我必须列出所有的对话,我做了那个部分。每个对话都包含该数字的所有短信。因此我必须对所有短信的收件箱和sentsms进行鉴别。我知道以下api可用于查找收件箱并发送。

content://sms/inbox
content://sms/sent

但我不想使用它。我使用api

列出了所有短信
content://sms/

我使用columnindex的类型,地址进行了测试,但它总是为收件箱和发件箱提供相同的结果。我的示例代码是

Uri SMS_INBOX = Uri.parse("content://sms");
        c = getContentResolver().query(SMS_INBOX, null, "thread_id" + " = "
                        + "3", null,
                        "date" + " ASC");
        if(c.moveToFirst()){
            count.add(c.getCount());
            for(int j=0;j<c.getCount();j++){
                System.out.println(c.getString(c.getColumnIndexOrThrow("body")).toString());
                System.out.println("new   person=="+c.getColumnIndex("person")+"type=="+c.getColumnIndexOrThrow("type"));
                c.moveToNext();
            }
        }
        c.close();

请帮帮我。

1 个答案:

答案 0 :(得分:6)

您可以在此处使用ContentObserver来跟踪已发送和已接收的消息,

覆盖onChange()的{​​{1}}方法并获取短信类型并相应地工作。 Psuedo代码如下所示。

ContentObserver

为短信注册Cursor cursor = mContext.getContentResolver().query(Uri .parse("content://sms"), null, null, null, null); String type = cursor.getColumnIndex("type"); if(cursor.getString(type).equalsIgnoreCase("1")){ // sms received } else if(cursor.getString(type).equalsIgnoreCase("2")){ //sms sent }

ContentObserver

ContentResolver observer = this.getContentResolver(); observer.registerContentObserver(Uri.parse("content://sms"), true, new MySMSObserver(new Handler(),this)); 将使用构造函数扩展MySMSObserver的类,其中参数为Handler和Context,

ContentObserver