国际惯例,先上代码

    /** * 保存到指定目录,但能立即更新到系统相册中(红米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

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  6. Android系统应用开发(六)Android(安卓)framework系统默认设置修改
  7. Android(安卓)Studio&源码混淆配置及其调试注意事项
  8. Android(安卓)AndroidManifest.xml配置文件
  9. android移植(0)-热身

随机推荐

  1. H5调用原生APP的js方法
  2. Android中蓝牙通信的实现
  3. Android 之 注解
  4. Android Studio MD5加密
  5. android 启动应用程序
  6. Android MediaScanner 总纲
  7. 安卓小米系统开发一些适配问题
  8. android 获取本地图片或音乐
  9. Android SHA加密实现
  10. ActionBar的一些使用方法