Android 安卓联系人照片:如何从网上取回(谷歌)联系人照片(因此,取消以前的本地图片更改)
我是唯一一个试图实现这一目标的人吗…:/强>Android 安卓联系人照片:如何从网上取回(谷歌)联系人照片(因此,取消以前的本地图片更改),android,contactscontract,Android,Contactscontract,我是唯一一个试图实现这一目标的人吗…:/ 简而言之: 我想找回我的联系人的照片,就像他们自己定义的那样(比如在他们自己的谷歌账户页面上) 用例:我自己修改了联系人的一张照片,现在,我想撤销该更改->我想“取回”我联系人的谷歌照片(他/她自己设置的照片) 我有一个管理谷歌联系人的应用程序。它还使用 它工作得很好 下面是我想支持的一个场景: 我在联系人列表中添加了一个新联系人,并输入了它的gmail地址。(好的) 过了一会儿,我的联系人应用程序上就有了联系人照片(因为联系人的谷歌账户上有一张照
简而言之: 我想找回我的联系人的照片,就像他们自己定义的那样(比如在他们自己的谷歌账户页面上) 用例:我自己修改了联系人的一张照片,现在,我想撤销该更改->我想“取回”我联系人的谷歌照片(他/她自己设置的照片)
我有一个管理谷歌联系人的应用程序。它还使用 它工作得很好 下面是我想支持的一个场景:
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();
}
}
private void updatephoto缩略图(位图、联系人)引发异常
{
字节[]contactPhotoBytes=getContactPhotoBytes(位图);
ArrayList ops=新的ArrayList();
//@formatter:off
字符串,其中=contacts contract.raw contacts.ACCOUNT\u NAME+“=?”
+“和”+contacts contract.raw contacts.ACCOUNT_TYPE+“=?”
+“和”+contacts contract.Data.CONTACT_ID+“=?”
+“和”+contacts contract.Data.RAW_CONTACT_ID+“=?”
+“和”+contacts contract.Data.MIMETYPE+“=?”;
//@formatter:on
字符串[]参数=新字符串[]
{
//@formatter:off
_帐户名,
AccountManagerHelper.GOOGLE\u帐户\u类型,
String.valueOf(contact.getId()),
String.valueOf(contact.getRawContactId()),
Contacts contract.CommonDataTypes.Photo.CONTENT\u ITEM\u TYPE
//@formatter:on
};
add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).with selection(其中,参数)
.带值(contacts contract.Data.IS_SUPER_PRIMARY,1)
.withValue(ContactsContract.CommonDataTypes.Photo.Photo,contactPhotoBytes).build());
尝试
{
_contentResolver.applyBatch(contacts contract.AUTHORITY,ops);
updateDisplayPhoto(contact.getRawContactId(),contactPhotoBytes);
}
捕获(远程异常)
{
e、 printStackTrace();
抛出新异常(如getMessage());
}
捕获(操作应用程序异常e)
{
e、 printStackTrace();
抛出新异常(如getMessage());
}
}
私有void updateDisplayPhoto(长rawContactId,字节[]photo)
{
Uri rawContactPhotoUri=Uri.withAppendedPath(ContentUris.withAppendedId(RawContacts.CONTENT_Uri,rawContactId),
rawscontacts.DisplayPhoto.CONTENT\u目录);
尝试
{
AssetFileDescriptor fd=getContentResolver();
OutputStream os=fd.createOutputStream();
写作(照片);
os.close();
fd.close();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
是检索用户谷歌个人资料图片的教程。它还检索一些其他内容,如帐户电子邮件、姓名等。。。
我认为这是回答你问题的直接方法:)如果发生故障,请保持联系。否。它们存储在本地安卓数据库和我的谷歌账户联系人列表中。我想找回联系人的照片,这是由联系人自己定义的(比如在谷歌账户页面上),谢谢你的链接。这允许获取用户的图片。我想检索的是其他用户的Google图片列表,对应于用户的联系人列表(Google电子邮件地址)