Android联系人照片:如何从网上取回(Google)联系人图片(以及'取消'以前的本地图片更改)

Pas*_*cal 11 android contactscontract

我是唯一一个试图实现这一目标的人......:/?


简而言之:

我想取回我的联系人的图片,因为他们自己定义了(例如在他们自己的Google帐户页面上).

使用案例:我自己修改了一个联系人的图片,现在,我想要撤消这个更改 - >我想'取回'我的联系人的谷歌图片(由他/她自己设置).


我有一个管理Google通讯录的应用.它还使用管理联系人照片

ContactsContract.CommonDataKinds.Photo.PHOTO

它工作正常.

这是我想支持的场景:

  1. 我在我的联系人列表中添加了一个新联系人,输入了它的gmail地址.(好)
  2. 过了一会儿,联系人照片可以在我的联系人应用程序上找到(因为联系人在其Google帐户上有一张图片,并且Android设备上的联系人同步已开启).(好)
  3. 在我的应用程序中,我更改了应用程序联系人图片(所以,我'覆盖'联系人图片)(确定)
  4. 在我的应用程序中,我想要恢复默认的Google联系人图片:不行.我怎样才能做到这一点?

请在这里查看我的代码来设置照片.我应该"清除"照片并依靠ContactProvider从Google帐户下载用户照片吗?

如何清除照片.将ContactsContract.CommonDataKinds.Photo.PHOTO设置为'null'?并删除相关文件,即

Uri rawContactPhotoUri = Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), RawContacts.DisplayPhoto.CONTENT_DIRECTORY)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

以下是我更新图片的方式:

    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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Nam*_*ato 1

是检索用户的 Google 个人资料图片的教程。它还会检索其他一些信息,例如帐户电子邮件、姓名……我认为这是解决您的问题的直接方法:)
如果有帮助,请保持联系。