【发布时间】:2018-03-06 08:59:02
【问题描述】:
我正在尝试获取我在联系人列表中选择的用户的电子邮件地址。我能够获取联系人的 ID、电话和姓名,并且通过使用 ID,我尝试使用新光标获取电子邮件地址,但无法从联系人那里获取详细信息。
下面是我正在使用的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent aData) {
super.onActivityResult(requestCode, resultCode, aData);
if (requestCode == PICK_CONTACT && resultCode == Activity.RESULT_OK && aData != null) {
ContentResolver cr = getContentResolver();
String phoneNo = "";
String name = "";
String id = "";
String email = "";
Uri uri = aData.getData();
if (uri != null) {
Cursor cursor = cr.query(uri, null, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
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);
}
cursor.close();
} else {
showDialog(getString(R.string.lbl_error_message_contact));
}
} else {
showDialog(getString(R.string.lbl_error_message_contact));
}
Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{id}, null);
while (emailCur.moveToNext()) { // when it gets here, it just skips the while loop and jumps down to the to close the emailCur
// This would allow you get several email addresses
// if the email addresses were stored in an array
email = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));
}
emailCur.close();
mMedia.setLendersName(name);
mMedia.setPhoneNumber(phoneNo);
mMedia.setEmail(email);
}
}
会不会是ID不对?
编辑
真正奇怪的一件事是,当我选择一个联系人并返回屏幕时。该 ID 与我在运行 @Android Team 的代码时获得的 ID 非常不同,该代码返回所有带有电子邮件地址的联系人。这可能是什么原因?
当我尝试获取电子邮件地址时,我的想法是 ID 不会有所不同,但似乎确实如此。
【问题讨论】:
-
谢谢,在我看来,讨论中的那个方法获取了所有有电子邮件地址的联系人,我正在做的是使用意图打开联系人列表,选择一个联系人,然后是详细信息该联系人被返回,因此 onActivityResult 方法。获取设备上的所有联系人,仅获取一个电子邮件帐户,将是一项艰巨的任务
-
是的,我知道,但提供者是一样的。只需查询
ContactsContract.Contacts.CONTENT_URI。
标签: android