Контактная информация для Android: как получить обратную ссылку (Google) из Интернета (и, таким образом, "отменить" прежнее локальное изменение изображения)

Я единственный, кто пытается достичь этого...:/?


Короче:

Я хочу вернуть изображение моих контактов, поскольку они сами определили его (например, на их собственной странице собственной учетной записи Google).

Случай использования: Я сам изменил одно из своих изображений контактов, и теперь я хочу отменить это изменение → Я хочу "вернуть" изображение Google моего контакта (одно установленный им самим).


У меня есть приложение, которое управляет контактами Google. Он также управляет фотографией контакта, используя

КонтактыContract.CommonDataKinds.Photo.PHOTO

И он отлично работает.

Вот сценарий, который я хотел бы поддержать:

  • Я добавляю новый контакт в мой список контактов, вводя его в адрес gmail. (OK)
  • Через некоторое время контактная фотография доступна в моем приложении для контактов (так как контакт имеет изображение в его учетной записи Google, а контактная синхронизация включена на устройстве Android). (OK)
  • В моем приложении я меняю изображение контакта приложения (так, я 'переопределяю' контактное изображение) (OK)
  • В моем приложении, я хочу вернуть изображение по умолчанию Google: Не в порядке. Как я могу это достичь?

Пожалуйста, посмотрите мой код здесь, чтобы установить фотографию. Должен ли я просто "очистить" фотографию и полагаться на ContactProvider, чтобы загрузить фотографию пользователя из учетной записи Google?

Как очистить фотографию. Установить КонтактыContract.CommonDataKinds.Photo.PHOTO на 'null'? и удалить связанный файл, т.е.

Uri rawContactPhotoUri = Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), RawContacts.DisplayPhoto.CONTENT_DIRECTORY)

Спасибо за помощь.

Вот как я обновляю изображение:

    private void updatePhotoThumbnail(Bitmap bitmap, Contact contact) throws Exception
    {
        byte[] contactPhotoBytes = getContactPhotoBytes(bitmap);

        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        // @formatter:off
        String where =     ContactsContract.RawContacts.ACCOUNT_NAME + "= ? "
                + "AND " + ContactsContract.RawContacts.ACCOUNT_TYPE + "= ? "
                + "AND " + ContactsContract.Data.CONTACT_ID + "= ? "
                + "AND " + ContactsContract.Data.RAW_CONTACT_ID + "= ? "
                + "AND " + ContactsContract.Data.MIMETYPE + " = ?";
        // @formatter:on

        String[] params = new String[]
        {
                // @formatter:off
                _accountName,
                AccountManagerHelper.GOOGLE_ACCOUNT_TYPE,
                String.valueOf(contact.getId()),
                String.valueOf(contact.getRawContactId()),
                ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
                // @formatter:on
        };

        ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).withSelection(where, params)
                .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, contactPhotoBytes).build());

        try
        {
            _contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
            updateDisplayPhoto(contact.getRawContactId(), contactPhotoBytes);
        }
        catch (RemoteException e)
        {
            e.printStackTrace();
            throw new Exception(e.getMessage());
        }
        catch (OperationApplicationException e)
        {
            e.printStackTrace();
            throw new Exception(e.getMessage());
        }
    }


    private void updateDisplayPhoto(long rawContactId, byte[] photo)
    {
        Uri rawContactPhotoUri = Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId),
                RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
        try
        {
            AssetFileDescriptor fd = getContentResolver().openAssetFileDescriptor(rawContactPhotoUri, "rw");
            OutputStream os = fd.createOutputStream();
            os.write(photo);
            os.close();
            fd.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

Ответ 1

Здесь - это учебное пособие по извлечению изображения профиля пользователя Google. Он также извлекает некоторые другие вещи, такие как электронная почта, имя,... Я думаю, что это прямой путь для вашего вопроса:)
Оставайтесь в контакте, если он сочтет.