如何通过电话号码获取联系人ID

时间:2012-06-05 14:05:24

标签: android contacts

我将手机的calllog查询到ListView。因此,当用户长按一个项目时,会出现一个对话框,其中包括“查看联系人”。为了能够查看联系人意图需要联系人ID。 我的问题是,我并不总能看到正确的联系方式。我点击彼得,彼得的联系表出现了。我点击Sarah,Jason的联系表出现了。

我一定是以错误的方式使用这段代码。请帮忙。

ContentResolver contentResolver = getContentResolver();

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phone));

Cursor cursor =  contentResolver.query(uri, new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, null, null, null);

if(cursor!=null) {
      while(cursor.moveToNext())
      {
        String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
        contactid2 = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));
        }
        cursor.close();
}

Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + contactid2));
 startActivity(intent_contacts);

也许我需要的不是PhoneLookup._ID,而是其他一些ID。

我也尝试了Felipe的回答here,同样的事情发生了。

修改

  • 在HTC Desire HD(2.3.5)上我得到了99%的正确联系人 例。
  • 在中兴刀片(2.2)上我在60%的案例中得到了适当的联系。
  • 在三星Galaxy Ace(2.3.3)上我在5%的情况下获得了正确的联系。

到底是怎么回事?

2 个答案:

答案 0 :(得分:4)

在深入了解主题之后,我在googlegroups上找到了sven的帮助。问题是我正在使用一个被剥夺的意图。我在开发者网站上阅读了很多页面,我一定以某种方式错过了它。

我也发布了完整的代码。

contactid26 = null;

                ContentResolver contentResolver = getContentResolver();

                Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phonenumintolist));

                Cursor cursor =  
                   contentResolver.query(
                        uri, 
                        new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
                        null, 
                        null, 
                        null);

                if(cursor!=null) {
                  while(cursor.moveToNext()){
                    String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
                   contactid26 = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));

                  }
                  cursor.close();
                }
                if (contactid26 == null)
                    {
                        Toast.makeText(DetailedCallHistory.this, "No contact found associated with this number", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactid26)));
                        //Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + contactid26));
                        startActivity(intent_contacts);
                    }

答案 1 :(得分:1)

在这种情况下,我将向您展示如何获取ID,以及  您输入并想要搜索的任何联系人号码,用于  例如,如果输入no并想要搜索其Name和id,则使用  如果你想进一步修改,这个代码是100%工作的 这个,那你可以告诉我

         Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,Uri.encode(phnno.getText().toString()));//phone no 
         String[] proj = new String[] 
           {///as we need only this colum from a table...
             Contacts.DISPLAY_NAME,
             Contacts._ID,
            };
         String id=null;
         String sortOrder1 = StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
         Cursor crsr = getContentResolver().query(lookupUri,proj, null, null, sortOrder1);
     while(crsr.moveToNext())
     {
         String name=crsr.getString(crsr.getColumnIndex(Contacts.DISPLAY_NAME));
          id = crsr.getString(crsr.getColumnIndex(Contacts._ID));
          Toast.makeText(this,"Name of this cntct is   : " +name +"\n id is : "+id ,Toast.LENGTH_SHORT).show();
     }
    crsr.close();