以编程方式保存照片联系人 - Android
Posted
技术标签:
【中文标题】以编程方式保存照片联系人 - Android【英文标题】:Save photo contact programmatically - Android 【发布时间】:2018-02-08 13:17:36 【问题描述】:我实际上是这样做的:
InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId)));
if (inputStream != null)
photo = BitmapFactory.decodeStream(inputStream);
else
// To open up a gallery browser
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Seleccione una imagen para el contacto"),1);
return photo;
使用该代码,我通过电话号码检索联系人照片,当联系人没有照片时,我需要按意图从图库中保存所选照片:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
if (resultCode == RESULT_OK)
if (requestCode == 1)
currImageURI = data.getData();
try
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), currImageURI);
catch (IOException e)
e.printStackTrace();
有人知道如何将此位图保存在联系人中吗? 谢谢!。
【问题讨论】:
【参考方案1】:使用此代码:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
if(mBitmap!=null) // If an image is selected successfully
mBitmap.compress(Bitmap.CompressFormat.PNG , 75, stream);
// Adding insert operation to operations list
// to insert Photo in the table ContactsContract.Data
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
.withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
.withValue(ContactsContract.Data.MIMETYPE,Photo.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO,stream.toByteArray())
.build());
try
stream.flush();
catch (IOException e)
e.printStackTrace();
【讨论】:
以上是关于以编程方式保存照片联系人 - Android的主要内容,如果未能解决你的问题,请参考以下文章