android中实现保存图片到指定目录,相册显示该目录里的图片
1 . 需求
最近要做一个简单的功能,目标是保存好截图后,打开微信扫一扫,打开相册可以直接看到自己创建的目录图片,之后批量删除之前保存的二维码,根据文件名来识别.
2.实现
因为功能不算太复杂,做了一下的简单测试代码
// 获取屏幕
View dView = getWindow().getDecorView();
dView.setDrawingCacheEnabled(true);
dView.buildDrawingCache();
Bitmap bmp = dView.getDrawingCache();
if (bmp != null) {
saveImage(this, bmp);
}
以上代码实现获取屏幕截图得到bitmap
最后saveImage方法如下:
public void saveImage(Context context, Bitmap bmp) {
// 首先保存图片
File appDir = new File(Environment.getExternalStorageDirectory(), "HCTrader");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 最后通知图库更新
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
context.sendBroadcast(intent);
}
效果如下:
以上方式是保存到指定的目录然后通知相册更新指定文件(如果想更新指定目录的话,就可以这样fromFile(appDir)),如果想保存到系统图库里,可以把文件的地址插入到系统图库,通过以下方法实现:
// 其次把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(context.getContentResolver(),
file.getAbsolutePath(), fileName, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
效果如下:
批量删除的方法:
File appDir = new File(Environment.getExternalStorageDirectory(), "HCTrader");
if (appDir.exists() && appDir.isDirectory()) {
File[] childFile = appDir.listFiles();
for (File f : childFile) {
if (f.getName().contains("人民币")) {
f.delete();
}
}
// 最后通知图库更新指定目录
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(appDir);
intent.setData(uri);
this.sendBroadcast(intent);
}