Android 联系人列表仅显示使用意向联系人合同的一个电话号码
我正在尝试从联系人列表中获取电话号码。 我可以在全球范围内做到这一点,但我有一个问题,联系人有多个电话号码 我的问题是:Android 联系人列表仅显示使用意向联系人合同的一个电话号码,android,android-contacts,phone-number,Android,Android Contacts,Phone Number,我正在尝试从联系人列表中获取电话号码。 我可以在全球范围内做到这一点,但我有一个问题,联系人有多个电话号码 我的问题是: 在AVD(API21)上,联系人列表很好地显示了我联系人的两部电话 在我的真实手机上(android 5.0.2=>API21),它只显示第一部手机。不是所有的,因为它是在AVD上 你知道为什么AVD和我的真实手机的行为不同吗 以下是我对意图的称呼: Intent contactIntent = new Intent(Intent.ACTION_PICK,
- 在AVD(API21)上,联系人列表很好地显示了我联系人的两部电话
- 在我的真实手机上(android 5.0.2=>API21),它只显示第一部手机。不是所有的,因为它是在AVD上
Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
contactIntent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(contactIntent, PICK_CONTACT);
这是我的OnActivity代码:
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
//Field to fill with the selected phone number
final EditText textPhone = (EditText) findViewById(R.id.Phone);
if (data != null) {
Uri uri = data.getData();
if (uri != null){
//Get the phone number id from the Uri
String id = uri.getLastPathSegment();
//Query the phone numbers for the selected phone number id
Cursor c = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone._ID + "=?",
new String[]{id}, null);
int phoneIdx = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
// get the only phone number
if (c.moveToFirst()) {
textPhone.setText(c.getString(phoneIdx));
} else {
//no result
Toast noResultFound = Toast.makeText(SendLocationInfoActivity.this, "No phone number found", Toast.LENGTH_SHORT);
noResultFound.show();
}
c.close();
}
}
}
通过使用ContactsContract.CommonDataTypes.Phone.CONTENT_URI,用户将看到一个联系人列表,每个电话号码有一个条目。所选联系人保证有姓名和电话号码
//Result code for contact picker
private static final int CONTACT_PICKER_RESULT = 1001;
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);
如果您想要所有联系人,无论他们是否有电话号码,请将ContactsContract.commondatatypes.phone.CONTENT\u URI
替换为ContactsContract.contacts.CONTENT\u URI
这将解决您的问题 请不要建议将显示联系人列表作为解决方法,并在我单击具有多部电话的联系人时显示对话框列表。我试过了,效果不错,但使用这种方法,联系人列表也会显示所有没有电话号码的联系人。也就是说,这些联系人显示在AVD中,但不显示在设备中。我说的对吗?实际上AVD显示contact+所有电话,而real device仅显示contact+第一部电话。