Getting all the time “permission denied” or “no such file or directory” by trying to save Bitmap image. What should i do?

南笙酒味 提交于 2019-11-26 10:01:21

问题


I`m trying to save Bitmap image by this code:

File sdcard = Environment.getExternalStorageDirectory();
            String filename = \"test\";
            File folder = new File(sdcard, \"/Download\");
            Log.v(\"ImageStorage1\", \"EXiST?: \" + folder.exists());
            folder.mkdirs();
            Log.v(\"ImageStorage2\", \"EXIST!: \" + folder.exists());
            Log.v(\"ImageStorage\", \"Folder: \" + folder);
            File file = new File(folder, filename + \".jpg\");

            try {
                FileOutputStream out = new FileOutputStream(file.getAbsoluteFile());
                result.compress(Bitmap.CompressFormat.JPEG, 90, out);
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

I`m also using in manifests file:

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

But i`m getting this one:

V/ImageStorage1: EXiST?: true
V/ImageStorage2: EXIST!: true
W/System.err: java.io.FileNotFoundException: 
/storage/emulated/0/Download/test.jpg (Permission denied)
    W/System.err:     at java.io.FileOutputStream.open0(Native Method)
    W/System.err:     at java.io.FileOutputStream.open(FileOutputStream.java:287)
    W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:223)
    W/System.err:     at java.io.FileOutputStream.<init>(FileOutputStream.java:171)

Actually, my task is to store to another folder and when I`m using this:

File folder = new File(sdcard, \"/kpi/test/a\");

I`m getting

V/ImageStorage1: EXiST?: false
V/ImageStorage2: EXIST!: false
(No such file or directory)

Even with:

folder.mkdirs();

I tried a lot and surfed a lot, but haven`t found an answer :(


回答1:


runtime permissions letting user to allow or deny any permission at runtime. use this lib Dexter library.also check an working exmple here

Include the library in your build.gradle

dependencies{
    implementation 'com.karumi:dexter:4.2.0'
}

this example requests WRITE_EXTERNAL_STORAGE.

Dexter.withActivity(this)
                .withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .withListener(new PermissionListener() {
                    @Override
                    public void onPermissionGranted(PermissionGrantedResponse response) {
                        // permission is granted, open the camera
                    }

                    @Override
                    public void onPermissionDenied(PermissionDeniedResponse response) {
                        // check for permanent denial of permission
                        if (response.isPermanentlyDenied()) {
                            // navigate user to app settings
                        }
                    }

                    @Override
                    public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                }).check();

Requesting Multiple Permissions To request multiple permissions at the same time, you can use withPermissions() method. Below code requests STORAGE and LOCATION permissions.

Dexter.withActivity(this)
                .withPermissions(
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.ACCESS_FINE_LOCATION)
                .withListener(new MultiplePermissionsListener() {
                    @Override
                    public void onPermissionsChecked(MultiplePermissionsReport report) {
                        // check if all permissions are granted
                        if (report.areAllPermissionsGranted()) {
                            // do you work now
                        }

                        // check for permanent denial of any permission
                        if (report.isAnyPermissionPermanentlyDenied()) {
                            // permission is denied permenantly, navigate user to app settings
                        }
                    }

                    @Override
                    public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                })
                .onSameThread()
                .check();


来源:https://stackoverflow.com/questions/49201017/getting-all-the-time-permission-denied-or-no-such-file-or-directory-by-tryin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!