您自己的答案会奏效,但效率不高,因为需要将照片编码为SQL查询并通过Android
IPC传输。这也使它受制于Android的IPC大小限制1MB(即,如果您的照片太大,则内容提供商 *** 作将失败)。
设置(创建或覆盖)RawContact的(主)照片的最有效方法是使用
openAssetFileDescriptor和这样的
ContactsContract.RawContacts.DisplayPhoto
URI(例如,从Android文档复制的示例):
public void writeDisplayPhoto(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) { // Handle error cases. }}
这种方法的唯一缺点是,它总是创建/替换的主要照片
RawContact。如果RawContact还没有照片,它将添加一张。
不幸的是没有办法用
openAssetFileDescriptor了
PHOTO_FILE_ID,所以你不能覆盖使用这种方法的ID标识的特定照片。但是,在现实生活中,大多数联系人最多只能有一张照片,所以这并不是一个真正的限制。
这将自动
Photo.PHOTO使用大照片的缩略图更新列,并分配一个
PHOTO_FILE_ID。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)