Android Studio存储Bitmap到系统相册中

用Android Studio做GS1-128条码识别器的时候需要开摄像头捕获条码进行识别,为了查看捕获到的图片,用了保存到手机系统相册的方法。在网上搜了一些方法,中间遇到了bug,总结一下:

首先,要在 AndroidManifest.xml文件中声明权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

本来是采用以下方法获取系统相册目录,但是出了bug:java.io.FileNotFoundException: /storage/emulated/0/Boohee/1589899902154.jpg: open failed: ENOENT (No such file or directory)

File appDir = new File(Environment.getExternalStorageDirectory(), "BarcodeBitmap");

后来搜了这个bug,在一篇文章里发现了这样会出问题,得用以下方法

File appDir = new File(context.getExternalFilesDir(null).getPath()+ "BarcodeBitmap");

修改后果然问题解决了

实现存储Bitmap到系统相册中的函数如下:

public void saveImageToGallery(Context context, Bitmap bmp) {
    //检查有没有存储权限
    if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        Toast.makeText(this, "请至权限中心打开应用权限", Toast.LENGTH_SHORT).show();
    } else {
        // 新建目录appDir,并把图片存到其下
        File appDir = new File(context.getExternalFilesDir(null).getPath()+ "BarcodeBitmap");
        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();
        }

        // 把file里面的图片插入到系统相册中
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(),
                    file.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        Toast.makeText(this, fileName, Toast.LENGTH_LONG);

        // 通知相册更新
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
    }
}

你可能感兴趣的:(日常Bug合辑,安卓,app,移动开发,java,android,studio)