Android 联系人照片:如何从网络上取回 (Google) 联系人图片(因此,“取消”以前的本地图片更改)
Posted
技术标签:
【中文标题】Android 联系人照片:如何从网络上取回 (Google) 联系人图片(因此,“取消”以前的本地图片更改)【英文标题】:Android contact photo: How to get back (Google) contact picture from the web (and so, 'cancel' a former local picture change) 【发布时间】:2014-02-20 00:07:12 【问题描述】:我是唯一一个试图实现这一目标的人吗...:/?
简而言之:
我想取回我的联系人的照片,因为他们自己定义了照片(例如在他们自己的 Google 帐户页面上)。
用例:我自己修改了一张联系人的照片,现在,我想撤消该更改 -> 我想“取回”我的联系人的 Google 照片(由他/她自己设置)。
我有一个管理 Google 通讯录的应用。它还使用管理联系人照片
ContactsContract.CommonDataKinds.Photo.PHOTO
而且它工作正常。
这是一个我想支持的场景:
-
我在我的联系人列表中添加了一个新联系人,输入它的 gmail 地址。 (好的)
一段时间后,我的联系人应用程序上会显示联系人照片(因为联系人的 Google 帐户中有一张照片,并且 android 设备上的联系人同步已开启)。 (好的)
在我的应用程序中,我更改了应用程序的联系人图片(因此,我“覆盖”了联系人图片)(好的)
在我的应用程序中,我想取回默认的 Google 联系人图片:不行。我怎样才能做到这一点?
请在此处查看我的代码以设置照片。 我应该只是“清除”照片并依靠 ContactProvider 从 Google 帐户下载回用户照片吗?
如何清除照片。将 ContactsContract.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();
【问题讨论】:
不。它们存储在本地 Android 数据库和我的 Google 帐户联系人列表中。我想取回联系人自己定义的联系人图片(例如在其 Google 帐户页面上) 【参考方案1】:Here 是一个检索用户谷歌头像的教程。它还检索其他一些东西,如帐户电子邮件、姓名、... 我认为这是解决您问题的直接方法:) 如果有帮助,请保持联系。
【讨论】:
感谢您的链接。这允许获取用户的图片。我要检索的是其他用户的列表谷歌图片,对应用户的联系人列表(谷歌电子邮件地址)以上是关于Android 联系人照片:如何从网络上取回 (Google) 联系人图片(因此,“取消”以前的本地图片更改)的主要内容,如果未能解决你的问题,请参考以下文章
Android,如何获取 Facebook/Twitter/etc 联系人照片
android 上的外部(例如 facebook)联系人照片
如何检测更新的android联系人并同步到firestore