Android 2.2阅读短信收件箱信息

时间:2011-08-30 04:08:25

标签: java android sms

我可以阅读短信收件箱并显示所有信息。我有两个问题。第一个是person字段始终为NULL。

这是我对“content:// sms / inbox”的查询。

Cursor cursor = context.getContentResolver().query(SMS_INBOX_CONTENT_URI,
           new String[] { "_id", "thread_id", "address", "person", "date", "body" },
                     null,
                     null,
                     SORT_ORDER);

person字段始终为NULL。有没有办法检索此SMS消息的实际显示名称?是否有连接到另一个表来检索显示名称?

其次,当我在手机上测试时,我发现我的短信不包含在查询中。为什么会这样?有可能解决这个问题吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

The person field is always NULL. Is there a way to retrieve the actual display name for


this SMS message? Is there a join to another table to retrieve display name?

对于显示名称,您使用了另一个查询和光标,或者您可以加入查询以获取此人的姓名,但有时您没有获得该名称,因为该人员联系人未保存在您的联系人列表或任何其他组织中或公司将发送消息,然后你没有得到名称,所以当时可以在联系表上查询获取名称,如果找到然后你可以显示它,否则显示地址默认。

在此,您获得了发件人地址的地址,如数字格式,因此您需要在联系人查询中传递此号码以检索该人的姓名

答案 1 :(得分:0)

试试这段代码:

public String findNameByAddress(Context ct,String addr)
        {
             Uri myPerson = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,
                        Uri.encode(addr));

             String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };

                Cursor cursor = ct.getContentResolver().query(myPerson,
                        projection, null, null, null);

                if (cursor.moveToFirst()) {



                    String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));


                    Log.e("","Found contact name");

                    cursor.close();

                    return name;
                }

                cursor.close();
                Log.e("","Not Found contact name");

                return addr;
        }

答案 2 :(得分:0)

如果手机上列有多个帐户,也请注意短信/收件箱人员不会直接与contacts.contract._id列对应。请参阅http://developer.android.com/reference/android/provider/ContactsContract.html以获取帮助。