下载图片,方便用于查找
/**
* 保存图片到SD卡
* @author kl
* @param isInsertGallery 是否保存到图库
* @return
*/
private String saveImg(Bitmap bitmap, boolean isInsertGallery){
File myappDir = new File(Environment.getExternalStorageDirectory(), "myapp");
if(myappDir.exists() && myappDir.isFile()) {
myappDir.delete();
}
if (!myappDir.exists()) {
myappDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".png";
File file = new File(myappDir, fileName);
if(file.exists()) {
file.delete();
}
try {
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(isInsertGallery) {
try {
MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), fileName, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
return file.getAbsolutePath();
}
更新相册
/**
* 保存后用广播扫描,Android4.4以下使用这个方法
* @author kl
*/
private void saveBroadcast(){
String filePath = saveImg(true);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath)));
Toast.makeText(this, "保存成功:" + filePath, Toast.LENGTH_LONG).show();
}
/**
* 保存后用MediaScanner扫描,通用的方法
* @author kl
*/
private void saveScan(){
String filePath = saveImg(false);
MediaScanner mediaScanner = new MediaScanner(this);
String[] filePaths = new String[]{filePath};
String[] mimeTypes = new String[]{MimeTypeMap.getSingleton().getMimeTypeFromExtension("png")};
mediaScanner.scanFiles(filePaths, mimeTypes);
Toast.makeText(this, "保存成功:" + filePath, Toast.LENGTH_LONG).show();
}
为什么说是Android4.4之前呢?因为Android4.4开始,Android把系统广播的权限回收了,只有系统应用才可以发送系统广播,那么这还怎么活啊???不要着急,车道山前必有路,还有一个MediaScannerConnection,这个玩意儿可强大了,不仅仅可以搞定图片,只要是媒体文件都可以用他来扫描,不过要知道文件的MimeType,不知道怎么获取文件MimeType的看这里: http://blog.csdn.net/yanzhenjie1003/article/details/44936643
在Android4.4和之后用MediaScannerConnection来扫描。
这里讲解一下怎么用MediaScannerConnection来扫描文件,我封装好了一个类出来:
/**
* 实现MediaScannerConnection.MediaScannerConnectionClient
* @author kl
* @Time 2017年1月8日
*/
public class MediaScanner implements MediaScannerConnection.MediaScannerConnectionClient {
/**
* 扫描对象
*/
private MediaScannerConnection mediaScanConn = null;
public MediaScanner(Context context) {
//实例化
mediaScanConn = new MediaScannerConnection(context, this);
}
/**文件路径集合**/
private String[] filePaths;
/**文件MimeType集合**/
private String[] mimeTypes;
/**
* 扫描文件
* @author kl
* @param filepaths
* @param mimeTypes
*/
public void scanFiles(String[] filePaths, String[] mimeTypes) {
this.filePaths = filePaths;
this.mimeTypes = mimeTypes;
mediaScanConn.connect();//连接扫描服务
}
/**
* @author kl
*/
@Override
public void onMediaScannerConnected() {
for (int i = 0; i < filePaths.length; i++) {
mediaScanConn.scanFile(filePaths[i], mimeTypes[i]);//服务回调执行扫描
}
filePaths = null;
mimeTypes = null;
}
private int scanTimes = 0;
/**
* 扫描一个文件完成
* @author kl
* @param path
* @param uri
*/
@Override
public void onScanCompleted(String path, Uri uri) {
scanTimes ++;
if(scanTimes == filePaths.length) {//如果扫描完了全部文件
mediaScanConn.disconnect();//断开扫描服务
scanTimes = 0;//复位计数
}
}
}