以编程方式保存照片联系人 - 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的主要内容,如果未能解决你的问题,请参考以下文章

将联系人的照片写入vcf文件,android

android以编程方式编辑联系人

以编程方式获取 android 联系人显示选项

地址簿以编程方式保存联系人图像

以编程方式批量添加数千个 Android 联系人

如何以编程方式找出联系人是不是可在android中编辑