从查找 URI 获取电话号码

Posted

技术标签:

【中文标题】从查找 URI 获取电话号码【英文标题】:Obtaining phone number from lookup URI 【发布时间】:2012-01-25 13:40:42 【问题描述】:

我一直在尝试使用他们的查找 URI 获取联系人的电话号码,但我无法正常工作。

Cursor myC = getContentResolver().query(lookupURI, null, null,
                        null, null);
                String phoneNumber;
                if (myC.moveToFirst()) 
                    while (myC.moveToNext()) 
                        phoneNumber = myC.getString(myC
                                .getColumnIndex(Phone.NUMBER));
                        Log.v("t", "phone number is: " + phoneNumber);
                    
                

lookupURI.toString() 是这个 URI:content://com.android.contacts/contacts/lookup/0r1-304846522C3052482C4A3442423C3248/1

谁知道我做错了什么?

【问题讨论】:

【参考方案1】:

不能保证这将适用于 4.0,因为我有一段时间没有使用它但在 2.3.3 上可以正常工作:

为了获取contactId,我首先让用户选择一个联系人:

public void clickSelectContact(View v) 
    Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    startActivityForResult(i, CONTACTS_REQUEST_CODE);

当用户选择了一个联系人时,它会回到这个方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == CONTACTS_REQUEST_CODE)
        if(resultCode == RESULT_OK)
             Uri uri = data.getData();
             System.out.println("uri: "+uri);
             System.out.println("PHONE NUMBER: " +  PhoneUtils.getContactPhoneNumber(this, uri.getLastPathSegment()));
        
    

调用我的静态 util 类:

private static final String TAG = "PhoneUtils";

public static String getContactPhoneNumber(Context context, String contactId) 
   int type = ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
   String phoneNumber = null;

   String[] whereArgs = new String[]  String.valueOf(contactId), String.valueOf(type) ;

   Log.d(TAG, "Got contact id: "+contactId);

   Cursor cursor = context.getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                            null,
                            ContactsContract.CommonDataKinds.Phone._ID + " = ? and " + ContactsContract.CommonDataKinds.Phone.TYPE + " = ?", 
                            whereArgs, 
                            null);

  int phoneNumberIndex = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);

  if (cursor != null) 
       Log.d(TAG, "Returned contact count: "+cursor.getCount());
       try 
             if (cursor.moveToFirst()) 
                 phoneNumber = cursor.getString(phoneNumberIndex);
             
             finally 
               cursor.close();
            
   

  Log.d(TAG, "Returning phone number: "+phoneNumber);
  return phoneNumber;

其中contactId = lookupURI.getLastPathSegment();

这么简单的事情太复杂了! :-(

附:您可能需要在清单中获得此权限:

 <uses-permission android:name="android.permission.READ_CONTACTS" />

【讨论】:

以上是关于从查找 URI 获取电话号码的主要内容,如果未能解决你的问题,请参考以下文章

从 Android 联系人中获取电子邮件和电话

安卓。通过电话号码从通讯录中检索名字和姓氏

从电话号码中查找国家代码

光标错误,从电话联系人列表中获取电话联系人

如何获取特定组的电话号码

ContactsContract 按联系人 ID 查找电话号码