Как получить доступ к контактам - PullRequest
0 голосов
/ 18 сентября 2018

Выбор контактов аналогичен открытию галереи и выбору картинки, но как мне получить доступ ко всем контактам и связать их с моим приложением.Для практики я пытаюсь создать базовое приложение для чата, поэтому я не хочу, чтобы подписанные пользователи отображались в моей активности, но я хочу показывать только пользователей, которые находятся в моих контактах и ​​которые используют мое приложение, как WhatsApp., wechat или любое другое текстовое приложение.Кроме того, я думал, смогу ли я получить доступ к избранному так же, как контакты ... Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018
    ContentResolver cr = context.getApplicationContext().getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);

    if (cur.getCount() > 0) {
        while (cur.moveToNext()) {

            String id;
            String name;
            String phoneNumbers = "";

            id = cur.getString(
                    cur.getColumnIndex(ContactsContract.Contacts._ID));
            name = cur.getString(cur.getColumnIndex(
                    ContactsContract.Contacts.DISPLAY_NAME));

            if (cur.getInt(cur.getColumnIndex(
                    ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
                Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{id}, null);
                while (pCur.moveToNext()) {
                    String pn = pCur.getString(pCur.getColumnIndex(
                            ContactsContract.CommonDataKinds.Phone.NUMBER));

                    if (pCur.isFirst())
                        phoneNumbers += pn;
                    else
                        phoneNumbers += ", " + pn;


                }
                pCur.close();
            }
        }
    }

    cur.close();
0 голосов
/ 18 сентября 2018

Для получения всех контактов вы можете использовать что-то вроде этого:

    final ArrayList<Contact> contacts = new ArrayList<>();
    ContentResolver contentResolver = getContentResolver();
    Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
    if (cursor != null) {
        if (cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
                if (hasPhoneNumber > 0) {
                    String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    Cursor phoneCursor = contentResolver.query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id},
                            null);
                    if (phoneCursor != null) {
                        if (phoneCursor.moveToNext()) {
                            String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                            contacts.add(new Contact(name, phoneNumber));
                            phoneCursor.close();
                        }
                    }
                }
            }
        }

        cursor.close();
    }

Для получения только тех, кто использует чат, возможно, вам следует сохранить эту информацию на сервере, используя номер телефона в качестве идентификатора, например.И когда вы получите все контакты, вы сможете сравнить телефонные номера и добавить в массив только те, которые зарегистрированы на вашем сервере ...

...