使用 Android Contact API 时出现问题
Button 放置在 EditText 旁边。当用户单击 Button 时,使用以下代码调用 Contact API:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, Constants.PICK_CONTACT);
上面的代码将调用以下方法:
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
if (reqCode == Constants.PICK_CONTACT) {
if (resultCode == Activity.RESULT_OK) {
String contactStr = getContactInfo(data);
mEditTxtTo.setText(contactStr);
}
}
}
protected String getContactInfo(Intent intent) {
String contactEmail = "";
Cursor cursor = managedQuery(intent.getData(), null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// Find Email Addresses
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null);
while (emails.moveToNext()) {
if (contactEmail.trim().length() > 0) {
contactEmail = new StringBuilder(contactEmail).append(IShipdocsMobileConstants.SEMICOLON_DELIMITER)
.append(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))).toString();
} else {
contactEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
emails.close();
}
cursor.close();
return contactEmail;
}
我添加了 if - else 条件来处理以下问题:
假设在名为 A 的联系人中,有 3 个电子邮件 Id。因此,在将第一封电子邮件添加到 contactEmail 之后,将在第一封电子邮件之后附加下一封电子邮件,并用分号分隔,并且循环一直持续到最后一个元素。
if (contactEmail.trim().length() > 0) {
contactEmail = new StringBuilder(contactEmail).append(";")
.append(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))).toString();
} else {
contactEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
当多个电子邮件用于单个联系人时当前面临的问题。
假设有 3 个联系人,A , B & C
现在,联系人姓名:A 有以下电子邮件:
a@a.com b@b.com c@c.com
联系人姓名:B 有以下电子邮件:
b@b.com c@c.com
如果仅添加联系人 A,则 b@b.com 将在 contactEmail 上添加两次。在我看来,上面的代码似乎在所有联系人上搜索 b@b.com。
因此,最终返回的电子邮件是:a@a.com、b@b.com、c@c.com、b@b.com
在上述代码中查找错误的任何建议/提示。