实现功能:
拍照保存图片
更新图库
删除图片视频
查询所有图片
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();