Android Contact API 使用中の問題
EditText の横に Button が配置されます。ユーザーが 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 つの email 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));
}
1 つの連絡先に対して複数のメールが存在する場合に現在直面している問題。
A 、 B 、 C の 3 つの連絡先があるとします。
現在、連絡先名: A には次の電子メールがあります:
a@a.com b@b.com c@c.com
連絡先名 : B には次のメールがあります:
b@b.com c@c.com
連絡先 A のみを追加すると、b@b.com が contactEmail に 2 回追加されます。上記のコードは、すべての連絡先で b@b.com を検索するように思えます。
したがって、返された最終的な電子メールは、a@a.com、b@b.com、c@c.com、b@b.com でした。
上記のコードでエラーを見つけるための提案/ヒント。