Android中图片保存到本地,并及时更新到系统相册
16lz
2021-01-25
国际惯例,先上代码
/** * 保存到指定目录,但能立即更新到系统相册中(红米2) * * @param context 上下文环境 * @param faceBitmap 位图资源 * @return 保存图片的路径 */ private String saveBitmapToJpg(Context context, Bitmap faceBitmap) { String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { Log.i(TAG, "SD *****>> SD卡不存在"); } else { Log.i(TAG, "SD *****>> SD卡 存在"); } // 创建图片保存目录 File faceImgDir = new File(Environment.getExternalStorageDirectory(), "ForumAlbum"); if (!faceImgDir.exists()) { faceImgDir.mkdir(); } // 以系统时间命名文件 String faceImgName = "forum-" + String.valueOf(System.currentTimeMillis()) + ".jpg"; File file = new File(faceImgDir, faceImgName); try { FileOutputStream fileOutputStream = new FileOutputStream(file); faceBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); fileOutputStream.flush(); fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } // 保存后要扫描一下文件,及时更新到系统目录(一定要加绝对路径,这样才能更新) MediaScannerConnection.scanFile(context, new String[]{Environment.getExternalStorageDirectory() + File.separator + "ForumAlbum" + File.separator + faceImgName}, null, null); return (Environment.getExternalStorageDirectory() + File.separator + "ForumAlbum" + File.separator + faceImgName); }
注释已经比较清晰,就不啰嗦了
添加权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
可能遇到的问题
< 1 > 使用广播的问题: 在Android 4.4中或之后的版本,若采用如下方式更新系统相册:
mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
将会抛出如下异常:(这是由Android 4.4中限制了系统应用才有权限使用广播通知系统扫描SD卡,且这种方法耗时间)
Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=2269, uid=20016
< 2 > 解决方案: 使用MediaScannerConnection对具体文件或文件夹进行扫描。 **(扫描文件夹方式在部分定制rom中无效,极力建议扫描具体文件)**
MediaScannerConnection.scanFile(this, new String[]{Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath() + "/" + fileName}
END
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
- Android系统应用开发(六)Android(安卓)framework系统默认设置修改
- Android(安卓)Studio&源码混淆配置及其调试注意事项
- Android(安卓)AndroidManifest.xml配置文件
- android移植(0)-热身