我想显示本机安卓联系人列表,然后一旦用户选择联系人,我想移动到下一个原生屏幕,其中显示联系人的详细信息(如电话号码,电子邮件等)。 现在,一旦用户选择了电子邮件地址或电话号码,我就希望将该数据恢复到原始活动并进行进一步处理。
我知道我可以使用
startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), REQUEST_CODE_PICK_CONTACT);
然后我自己使用getContentResolver().query()
解析联系人,然后存储每个必填字段。然后最后在一个单独的活动上显示联系人详细信息,然后一旦用户选择任何一个电话号码或电子邮件,然后我用它来进行进一步处理。
我尝试在onActivityResult()
内执行以下操作:
Uri contactData = data.getData();
Intent intent = new Intent(Intent.ACTION_PICK, contactData);
startActivityForResult(intent, REQUEST_CODE_PICK_CONTACT_DETAIL);
这会显示联系人的详细信息,但是当用户选择一个特定号码时,android会调用它,而不是在之前的活动中将其传回给我。
但是如果可能的话我想使用原生屏幕,这将需要更少的解析,没有额外的活动/片段。
有人可以建议怎么做吗?
由于
答案 0 :(得分:0)
这可能会有所帮助:
Uri contactData = data.getData();
ContentResolver cr = getContentResolver();
Cursor c = cr.query(contactData, null, null, null, null);
if (c.moveToFirst()) {
String id = c
.getString(c
.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String hasPhone = c
.getString(c
.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (hasPhone.equalsIgnoreCase("1")) {
Cursor phones = getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + id, null, null);
phones.moveToFirst();
String cNumber = phones
.getString(phones
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Toast.makeText(getApplicationContext(), cNumber,
Toast.LENGTH_SHORT).show();
String nameContact = c
.getString(c
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
// contact number = cNumber
//contact name = nameContact
}
}
答案 1 :(得分:0)
您可以通过这种方式从手机联系方式获取联系方式
Uri uri = data.getData();
String[] projection = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor people = getActivity().getContentResolver().query(uri, projection, null, null, null);
int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
int indexNumber = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int type = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
people.moveToFirst();
do {
String name = people.getString(indexName);
String number = people.getString(indexNumber);
System.out.println(name+number);
} while (people.moveToNext());