1

我想显示本机 android 联系人列表,然后一旦用户选择一个联系人,我想移动到下一个本机屏幕,它显示联系人的详细信息(如电话号码、电子邮件等)。现在,一旦用户选择了电子邮件地址或电话号码,我就想将该数据恢复到我的原始活动并进行进一步处理。

我知道我可以使用

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 会调用它,而不是在之前的活动中将其传回给我。

但如果可能的话,我想使用本机屏幕,它需要的解析更少,也不需要额外的活动/片段。

有人可以建议如何去做吗?

谢谢

4

2 回答 2

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
}
}
于 2013-09-18T09:05:02.727 回答
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());
于 2016-06-02T07:14:00.997 回答