如何通过sms消息获取联系信息

kev*_*ynx 2 android

我正在开发一个扩展的SMS应用程序.现在我可以阅读mmssms.db中的所有短信.在SMS数据库表中,字段"person"表示联系人表中的"_id".当'person'> = 1时,这意味着该消息是从联系人列表中的人发送的.所以我可以从联系表'managedQuery'.但问题是,在我的手机中,测试程序有时甚至无法查询联系信息甚至'人'> = 1.那么有人可以告诉我一些正确的方法来查询短信表中提交的"人"的联系信息吗?以下是一些示例代码,可以使我的问题更清晰:

class ContactItem {  
    public String mName;  
}  

    ContactItem getContact(Activity activity, final SMSItem sms) {  
        if(sms.mPerson == 0) return null;  
        Cursor cur = activity.managedQuery(ContactsContract.Contacts.CONTENT_URI,   
                new String[] {PhoneLookup.DISPLAY_NAME},   
                " _id=?",   
               new String[] {String.valueOf(sms.mPerson)}, null);  
       if(cur != null &&  
           cur.moveToFirst()) {  
           int idx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);  
           ContactItem item = new ContactItem();  
           item.mName = cur.getString(idx);  
           return item;  
       }  
       return null;  
   }  
Run Code Online (Sandbox Code Playgroud)

kev*_*ynx 6

好吧,因为没有人帮助我,我试着阅读一些开源项目代码,现在我得到了答案.正如我在一开始所认为的,从SMS消息查询联系信息的最佳方式是通过NUMBER(也称为ADDRESS)进行查询:

   ContactItem getContactByAddr(Context context, final SMSItem sms) {  
    Uri personUri = Uri.withAppendedPath(  
            ContactsContract.PhoneLookup.CONTENT_FILTER_URI, sms.mAddress);  
    Cursor cur = context.getContentResolver().query(personUri,  
            new String[] { PhoneLookup.DISPLAY_NAME },  
            null, null, null );  
    if( cur.moveToFirst() ) {  
        int nameIdx = cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);  
        ContactItem item = new ContactItem();  
        item.mName = cur.getString(nameIdx);  
       cur.close();  
       return item;  
   }  
   return null;  
Run Code Online (Sandbox Code Playgroud)

}