1,情况说明
明明在文件管理器找得到图片,但是在手机系统的图库/相册里却找不到。
原因:文件虽然保存了,但是图库没有刷新。
解决办法:保存文件成功后通过发送广播来通知图库刷新。
最靠谱的解决办法
先把图片插入到系统图库中,再通知图库更新。
注意这里传了文件的绝对路径 file1.getAbsolutePath())
MediaStore.Images.Media.insertImage(context.getContentResolver(),
filePhth,fileName , null);
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file1.getAbsolutePath())));
前面为什么说最靠谱。因为你可能在用这个,大部分手机这个方法一样可行,但是我用荣耀4c不行(被这个坑了近两个小时)
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+ Environment.getExternalStorageDirectory())))
下面附上完整的保存图方法。
/**
* 保存位图到本地
* @param bitmap
* @param path 本地路径
* @return void
*/
public void SavaImage(Bitmap bitmap, String path) {
File file = new File(path);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(file);
intent.setData(uri);
context.sendBroadcast(intent);
FileOutputStream fileOutputStream = null;
String filePhth;
String fileName;
//文件夹不存在,则创建它
if (!file.exists()) {
file.mkdir();
}
try {
filePhth=path + "/" + System.currentTimeMillis() + ".png";
fileName=System.currentTimeMillis()+"";
File file1=new File(filePhth);
fileOutputStream = new FileOutputStream(file1.getPath());
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.close();
//图片路径
// MediaStore.Images.Media.insertImage(context.getContentResolver(),
// filePhth,fileName , null);
MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "", "");
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + file1.getAbsolutePath())));
Log.d("aaa",file1.getAbsolutePath()+"-----"+path);
// context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
} catch (Exception e) {
ToastUtil.showToast("保存失败");
e.printStackTrace();
}
}
网友评论