通过尝试保存位图图像一直获取 "permission denied" 或 "no such file or directory"。我应该怎么办?
Getting all the time "permission denied" or "no such file or directory" by trying to save Bitmap image. What should i do?
我正在尝试通过此代码保存位图图像:
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();
}
我也在清单文件中使用:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
但是我得到了这个:
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)
实际上,我的任务是存储到另一个文件夹,当我使用这个时:
File folder = new File(sdcard, "/kpi/test/a");
我正在
V/ImageStorage1: EXiST?: false
V/ImageStorage2: EXIST!: false
(No such file or directory)
即使有:
folder.mkdirs();
我尝试了很多,也浏览了很多,但没有找到答案:(
runtime permissions letting user to allow or deny any permission at runtime. use this lib Dexter library.also check an working exmple here
在您的 build.gradle
中包含该库
dependencies{
implementation 'com.karumi:dexter:4.2.0'
}
此示例请求 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();
请求多个权限
同时请求多个权限,可以使用withPermissions()
方式。下面的代码请求 STORAGE
和 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();
我正在尝试通过此代码保存位图图像:
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();
}
我也在清单文件中使用:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
但是我得到了这个:
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)
实际上,我的任务是存储到另一个文件夹,当我使用这个时:
File folder = new File(sdcard, "/kpi/test/a");
我正在
V/ImageStorage1: EXiST?: false
V/ImageStorage2: EXIST!: false
(No such file or directory)
即使有:
folder.mkdirs();
我尝试了很多,也浏览了很多,但没有找到答案:(
runtime permissions letting user to allow or deny any permission at runtime. use this lib Dexter library.also check an working exmple here
在您的 build.gradle
dependencies{
implementation 'com.karumi:dexter:4.2.0'
}
此示例请求 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();
请求多个权限
同时请求多个权限,可以使用withPermissions()
方式。下面的代码请求 STORAGE
和 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();