1

我正在开发一个 ANdroid 应用程序。在我的应用程序中,我必须列出所有对话,并且我做了那部分。每个对话都包含该号码的所有短信。所以我必须从所有短信中区分收件箱和发送短信。我知道以下 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();

请帮我。

4

1 回答 1

6

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

覆盖onChange()方法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您的类将在哪里扩展ContentObserver,构造函数具有参数作为处理程序和上下文,

public MySMSObserver(Handler handler, Context context) {
        super(handler);
        this.context = context;
}
于 2012-08-16T04:45:50.200 回答