将意图图像保存到图库/文件夹

时间:2016-12-05 19:51:32

标签: java android android-permissions

我正在尝试将图像保存到三星galaxy s6边缘的文件夹中。我是一名初学者并创建了一个应用程序来练习拍摄一个意图图像并将图像返回到我的应用程序,然后我选择一个图像过滤器,并进一步想将它保存到我的设备中。我不明白为什么它不起作用。我得到的错误是:

W / System.err:java.io.FileNotFoundException:/storage/emulated/0/Pictures/Pictures.jpg:open failed:EACCES(Permission denied)

以下是代码:

public void savePhoto(View view) {
        if(currentBitmap != null) {
            File storageLoc = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
            File file = new File(storageLoc, "Pictures.jpg");

            try {
                FileOutputStream fos = new FileOutputStream(file);
                currentBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();

                Context context = getApplicationContext();

                Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                scanIntent.setData(Uri.fromFile(file));
                context.sendBroadcast(scanIntent);

                Toast.makeText(getApplicationContext(), "Your image has been saved!", Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(getApplicationContext(), "No image taken!", Toast.LENGTH_SHORT).show();
        }
    }

我正在使用API​​15,如果它有相关的东西。我的其余代码在不保存图像的情况下运行良好。如果有人能看到问题,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

你的Android版本似乎高于Marshmallow。意味着您需要在运行时检查权限。日志显示权限被拒绝。

你可以用两种方式做到这一点

  1. 通过ContextCompat.checkSelfPermission()方式检查权限
  2. 通过gradle声明ANDROID_BUILD_TARGET_SDK_VERSION = 22