Получить контактные данные человека из намерения сборщика контактов - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь получить доступ к имени контакта, номеру телефона и адресу человека, которого я выбрал из намерения средства выбора контактов.
Вот код, который я использую для открытия средства выбора контактов. Намерение:

Вот код, который я использую:

Intent intent = new Intent(Intent.ACTION_PICK, 
ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT);

case PICK_CONTACT:
        if (resultCode == Activity.RESULT_OK) {

          System.out.println("in on ActivityResult");
          Uri contactData = data.getData();
          Cursor c = getActivity().managedQuery(contactData, null, 
null, null, null);
          if (c.moveToFirst()) {
        String id = 
c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));StringhasPhone=c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

            if (hasPhone.equalsIgnoreCase("1")) {
              Cursor phones             getActivity().getContentResolver().query(ContactsContract.CommonDataKind    s.Phone.CONTENT_URI,
              null,
              ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                  + " = " + id, null, null);
          phones.moveToFirst();
          String cNumber = 
phones.getString(phones.getColumnIndex("data1"));String name phones.getString(phones.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
          //here you can find out all the thing.
          System.out.println("NAME:"+name);
        }Cursor postal_cursor=getActivity().getContentResolver().query(ContactsContract.Data.CONTENT_URI,
            new String[]{ 
 ContactsContract.CommonDataKinds.StructuredPostal.STREET,

ContactsContract.CommonDataKinds.StructuredPostal.CITY,


ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS},
            ContactsContract.Data.CONTACT_ID + "=? AND " +

ContactsContract.CommonDataKinds.StructuredPostal.MIMETYPE + "=?",
            new String[]{String.valueOf(id), 
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE},
            null);
        postal_cursor.moveToFirst();
        while(postal_cursor.moveToNext())
        {
          String Strt = 
postal_cursor.getString(postal_cursor.getColumnIndex(

ContactsContract.CommonDataKinds.StructuredPostal.STREET));
          String Cty = 
 postal_cursor.getString(postal_cursor.getColumnIndex(

ContactsContract.CommonDataKinds.StructuredPostal.CITY));
          String cntry = 
 postal_cursor.getString(postal_cursor.getColumnIndex(

 ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
          String address = 
postal_cursor.getString(postal_cursor.getColumnIndex(
              ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
        }
        postal_cursor.close();   }

, но я не могу получить адрес, который хранится.

Любая помощь приветствуется.Спасибо

1 Ответ

0 голосов
/ 14 февраля 2019

Если у вас нет разрешения READ_CONTACTS , вы сможете получить информацию только из таблицы Contacts.CONTENT_URI, а не конкретную информацию, такую ​​как телефон или почтовый адрес.

Если вы хотите получить телефон, вместо этого вы можете использовать специальную функцию выбора телефона, например:

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);

или для получения почтового адреса:

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(CommonDataKinds.StructuredPostal.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);

См. Здесь: https://developer.android.com/guide/components/intents-common#PickContactDat

Если вы хотите получить обе части информации, вам нужно запросить у пользователя READ_CONTACTS разрешений для выполнения этих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...