gpt4 book ai didi

android 联系人照片 : How to get back (Google) contact picture from the web (and so, 'cancel' 原本 map 片改)

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:19 26 4
gpt4 key购买 nike

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


简而言之:

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

用例:我自己修改了我联系人的一张图片,现在,我想撤消该更改 -> 我想“取回”我联系人的 Google 图片(那个由他/她自己设置)。


我有一个管理 Google 通讯录的应用程序。它还使用

管理联系人照片

ContactsContract.CommonDataKinds.Photo.PHOTO

而且它工作正常。

这是我想支持的场景:

  1. 我在我的联系人列表中添加了一个新联系人,输入了它的 gmail 地址。 (好的)
  2. 一段时间后,联系人照片在我的联系人应用程序中可用(因为联系人在其 Google 帐户中有照片,并且联系人同步在 Android 设备上处于打开状态)。 (好的)
  3. 在我的应用中,我更改了应用联系人图片(因此,我“覆盖”了联系人图片)(确定)
  4. 在我的应用中,我想恢复默认的 Google 联系人图片:不行。我怎样才能做到这一点?

请在此处查看我的代码以设置照片。我是否应该只“清除”照片并依靠 ContactProvider 从 Google 帐户下载回用户照片?

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

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();
}
}

最佳答案

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

关于android 联系人照片 : How to get back (Google) contact picture from the web (and so, 'cancel' 原本 map 片改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21409887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com