只有电话号码的Android联系人选取器是怎样的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我发现,为了启动一个过滤版本的联系人选择器,我可以使用这个:

Intent pickContactIntent = new Intent( Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI );
pickContactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(pickContactIntent, CONTACT_PICKER_RESULT);

我只是想弄清楚如何在onActivityResult方法中检索所选联系人的姓名和电话号码:

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     // what goes here...
}

我已经在onActivityResult中尝试了许多不同的东西,但查询不返回数字。

提问于
用户回答回答于

你可以试下下面的3步方法:

步骤1 - 需要在Manifest中添加读/写联系人权限:

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!-- OR - depends on the requiremnts-->
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

第2步 - 然后需要启动联系人选择器的意图,但在此之前需要检查是否授予联系人权限(仅适用于Android> = 23):

if (hasPermissions(Manifest.permission.READ_CONTACTS)) {
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
      startActivityForResult(intent, REQUEST_PICK_CONTACT);
} else {
     // Request Permissions
}

第3步 - 然后需要获得活动结果:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
     super.onActivityResult(requestCode, resultCode, data);
     if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_PICK_CONTACT) {
         String phoneNo = null;
         String name = null;

         Uri uri = data.getData();
         Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);

         if (cursor.moveToFirst()) {
         int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
         int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);

         phoneNo = cursor.getString(phoneIndex);
         name = cursor.getString(nameIndex);

         Log.e("onActivityResult()", phoneIndex + " " + phoneNo + " " + nameIndex + " " + name);
      }
      cursor.close();
  }
}
用户回答回答于
你可以使用下面的代码:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI);  
startActivityForResult(intent, 1);

String phoneNo = null;
Uri uri = data.getData();
Cursor cursor = getContentResolver().query(uri, null, null, null, null);

if (cursor.moveToFirst()) {
    int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    phoneNo = cursor.getString(phoneIndex);
}

curosr.close();

扫码关注云+社区