android 多种方式实现拍照保存并更新图库,删除图片,获取所有图片

实现功能:
拍照保存图片
更新图库
删除图片视频
查询所有图片


1.拍照保存

①:bitmap.compress方式

	/**
     * 保存图片到本地
     * @param bitmap
     */
    private void savePhotoToDatabase(Bitmap bitmap){
    	String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()+File.separator+"Camera";
        File imgFileDir = new File(path);
        if (!imgFileDir.exists()) {
            imgFileDir.mkdirs();
        }
        //文件路径路径
        String fileName = path + File.separator + generateFileName();            
        File imgFile = new File(imgFilePath);
        
        try {
            FileOutputStream fos = new FileOutputStream(imgFile);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (Exception error) {
            return ;
        }
        nofityGallery(imgFile);  // 保存到数据库,更新图库
    }
    
	/**
     * 生成图片名称
     * @return
     */
    private String generateFileName() {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_hhmmss", Locale.getDefault());
        String strDate = dateFormat.format(new Date());
        return "img_" + strDate + ".jpg";
    }

②:直接保存byte数据

	//文件路径路径
	String fileName = path + File.separator + generateFileName();     
    File imgFile = new File(imgFilePath);
    
    try {
         FileOutputStream out = new FileOutputStream(filename/*imgFile*/);  
         out.write(datas);
         out.close();
    } catch (FileNotFoundException e) {
         e.printStackTrace();
    } catch (IOException e) {
         e.printStackTrace();
    }
    nofityGallery(imgFile);

2.更新图库

①:使用contentResolver.insert(…);

 	/**
     *  通知相册更新
     */
    public void nofityGallery(File file){
        ContentValues contentValues = new ContentValues();
        contentValues.put(MediaStore.Images.Media.DATA, file.toString());
        Uri uri = mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        intent.setData(uri);
        mContext.sendBroadcast(intent);
    }

②:使用insertImage(…),会生成一个缩略图

	/**
     *  通知相册更新
     *  内部会调用contentResolver的insert方法
     */
    public void nofityGallery(File file){       
        MediaStore.Images.Media.insertImage(mContext.getContentResolver(),file.getAbsolutePath(), file.getName(), null);  
     //   MediaStore.Images.Media.insertImage(mContext.getContentResolver(), BitmapFactory.decodeFile(file.getAbsolutePath()), file.getName(), null);
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri uri = Uri.fromFile(file);
        intent.setData(uri);
        sendBroadcast(intent);
    }

③:scanFile方式

	/**
     *  通知更新
     */
	MediaScannerConnection.scanFile(context,
                new String[]{path},
                new MediaScannerConnection.OnScanCompletedListener() {
                    @Override
                    public void onScanCompleted(String path, Uri uri) {
                        Log.i(TAG,"onScanCompleted"+path);
                    }
                });

3.查询数据库,获取所有图片

	 /**
     *  根据 _id 倒序查询数据库    _id desc 倒序查    _id asc 顺序查
     * @param uri
     * @param columnName
     * @param type
     */
    private void queryDatabase(){
    	Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    	String columnName = MediaStore.Images.Media.DATA;
    	
        Cursor mCursor = getContentResolver().query(uri,null,null,
                null,"_id desc");  
        while (mCursor.moveToNext()){
            GalleryItemBean itemBean = new GalleryItemBean();
            String path = mCursor.getString(mCursor.getColumnIndex(columnName));  // 图片的路径
            int id = mCursor.getInt(mCursor.getColumnIndex(MediaStore.Images.Media._ID));

            itemBean.setId(id);
            itemBean.setPath(path);
            itemBean.setType(type);
         
            dataList.add(itemBean);
            Logger.d(itemBean.toString());
        }
        mCursor.close();

    }

4.删除图片

    /**
     *  从数据库中删除
     */
    private void notifyGalleryDelet(){
        Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        // String wherr = MediaStore.Video.Media.DATA+"=\""+  mAdapter.getPhotoPathList().getPath() +"\"";
        long id = mAdapter.getPhotoPathList().get(mCurrentPosition).getId();  // 目录三中获取到的id
        Uri newUri = ContentUris.withAppendedId(uri,id);   
        int result = getContentResolver().delete(newUri,null,null);
        Logger.d(result);
    }

5.获取图片缩略图

①:指定大小MediaStore.Video.Thumbnails.MICRO_KIND,MINI_KIND

	Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path, Thumbnails.MINI_KIND); //用于获取视频的缩略图
	Bitmap bitmap = ThumbnailUtils.createImageThumbnail(path, Thumbnails.MINI_KIND) //用于获取图片的缩略图

②:自定义大小

	Bitmap bitmap = ThumbnailUtils.extractThumbnail(Bitmap source, int width, int height);

6.byte[]和Bitmap转换

//将byte[]类型转换成Bitmap类型
Bitmap bitmap = BitmapFactory.decodeByteArray(byte, 0, byte.length);

//Bitmap转换成byte[]
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
byte[] datas = baos.toByteArray();

图库更新同步问题总结

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值