android - 保存文件显示 Permission Denied 虽然已授予权限
问题描述
我正在将图像从滑行保存到设备。我在第一次运行应用程序时请求许可,因为这就是我的应用程序所做的。
final File myDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DesiJewellery/");
public void saveImage(Bitmap bitmap, String img_title) {
fname = img_title;
myDir.mkdirs();
File image = new File(myDir, fname);
FileOutputStream outStream;
if (image.exists()) {
image.delete();
}
try {
outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outStream);
outStream.flush();
outStream.close();
success = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (success) {
Toast.makeText(getActivity(), "Design saved - " + img_title, Toast.LENGTH_SHORT).show();
} else {
// Toast.makeText(getActivity(), "Something went wrong.", Toast.LENGTH_LONG).show();
}
// this one to show in gallery:
}
它在模拟器中运行良好,但在真实设备中显示
java.io.FileNotFoundException:/storage/emulated/0/DesiJewellery/m_aad14.jpg(权限被拒绝)
权限检查。我在 MainActivity 上运行它。
public void isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED && checkSelfPermission(android.Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
} else {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
} else {
}
}
PS-我有 2 个真实设备。它在 Mashmallow 和 Nougat Emulator 中工作,但问题仅在 Oreo 中。
解决方案
您应该在 Android Mainifest 中添加WRITE_EXTERNAL_PERMISSION ,如下所示:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:node="replace"/>
推荐阅读
- html - 如何提高我的网站在移动设备上的可读性?
- cvs - cvs 在 MacOs-Catalina 上坏了?(无法获取工作目录)
- google-apps-script - 有没有办法让谷歌表单响应在具有多个页面的工作表上进行格式化和排序
- validation - 在 Azure B2C 社交注册 [api.selfasserted] 验证期间显示的 verifying_blurb 文本保留在屏幕上
- api - 请求正文没有出现在 OpenApi3 + widdershins + shins 的 curl 示例中
- java - 是否有另一种方法可以在 Java 中为 ArrayLists 流()?
- java - 如何在 Math.random java 中获取不同的数字
- python - Matplotlib imshow 图尺寸太小
- sql - 在同一查询中将计数的平均值与另一个属性一起使用
- laravel - 如何正确更新只有一个标识 ID 的数组