查看联系人详细信息并获取用户选择的电话号码

时间:2013-09-18 05:54:19

标签: android android-contacts contactscontract

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

我知道我可以使用

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

但是如果可能的话我想使用原生屏幕,这将需要更少的解析,没有额外的活动/片段。

有人可以建议怎么做吗?

由于

2 个答案:

答案 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());