概述
实现功能:
拍照保存图片
更新图库
删除图片视频
查询所有图片
文章目录
- 1.拍照保存
- 2.更新图库
- 3.查询数据库,获取所有图片
- 4.删除图片
- 5.获取图片缩略图
- 6.byte[]和Bitmap转换
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();
图库更新同步问题总结
最后
以上就是美满发夹为你收集整理的android 多种方式实现拍照保存并更新图库,删除图片,获取所有图片的全部内容,希望文章能够帮你解决android 多种方式实现拍照保存并更新图库,删除图片,获取所有图片所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复