【发布时间】:2015-07-05 13:36:51
【问题描述】:
我正在尝试使用 android 中的意图选择联系人。我需要的信息是联系人的姓名、电话号码和电子邮件地址。遵循我迄今为止的尝试。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
// Check for the request code, we might be usign multiple startActivityForReslut
switch (requestCode) {
case RESULT_PICK_CONTACT:
contactPicked(data);
break;
}
}
}
private void contactPicked(Intent data) {
Cursor cursor = null;
try {
// getData() method will have the Content Uri of the selected contact
Uri uri = data.getData();
//Query the content uri
cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int nameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
String phoneNo = cursor.getString(phoneIndex);
String name = cursor.getString(nameIndex);
String contactBookId = uri.getLastPathSegment();
String email = null;
try {
Cursor emailCur
= getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{contactBookId}, null);
emailCur.moveToFirst();
while (emailCur.moveToNext()) {
String phone = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
int type = emailCur.getInt(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
String s = (String) ContactsContract.CommonDataKinds.Email.getTypeLabel(getActivity().getResources(), type, "");
Log.d("TAG", s + " email: " + phone);
}
emailCur.close();
} catch (Exception e) {
Log.e(TAG, "Exception while trying to fetch email addresses of " + name + ":" + e.getMessage());
}
cursor.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这就是我的意图
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);
我的问题是 emailCur 从不读取任何电子邮件地址。代码永远不会进入循环。
编辑
即使我放弃 getLastPathSegment() 并按如下方式检索 id,我也会得到相同的行为
int idIndex = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
String contactBookId = cursor.getString(idIndex);
【问题讨论】:
-
与其依赖
getLastPathSegment(),不如看看CONTACT_ID是否是您在cursor中返回的列之一。 -
@CommonsWare 我试过了,还有
_ID不走运。我会再试一次,让你知道。 -
@CommonsWare 我再次尝试了它,但没有任何运气。我也用我尝试过的方法更新了我的问题。
-
使用此链接。这个对我有用。希望也对你有用。 stackoverflow.com/questions/34763352/…
标签: android android-intent android-contentprovider android-contacts