File path = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "picture");
if (! path.exists()) {
path.mkdirs();
if (!path.exists()) {
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HH_mm_ss", Locale.CHINA).format(new Date());
File imagePath = new File(path.getPath() + "_" + "IMG_" + timeStamp + ".jpg");
BufferedOutputStream fos;
try {
fos =new BufferedOutputStream(new FileOutputStream(imagePath));
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
return imagePath;
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
return null;
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
return null;
}
在清单中,权限集是正确的
答案 0 :(得分:8)
在Android10上
use method -> Environment.getExternalStoragePublicDirectory()
java.io.FileNotFoundException: /storage/emulated/0/Download open failed: EACCES (Permission denied)
在您的应用与范围存储完全兼容之前,您可以根据应用的目标SDK级别或requestLegacyExternalStorage清单属性暂时选择退出:
Google在Android Q上具有一项新功能:外部存储的过滤视图。快速解决方案是将以下代码添加到AndroidManifest.xml文件中:
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
答案 1 :(得分:4)
问题是我的权限格式错误
使用权限android:name =&#34; android.permission.WRITE_EXTERNAL_STORAGE
android.permission
应为小写
使用的许可 机器人:名称= android.permission.WRITE_EXTERNAL_STORAGE
如果我添加imagePath.createNewFile();
它也会抛出FileNotFoundExceptions
。
答案 2 :(得分:1)
此问题在Android Pie和更高版本中。 因此,将这行添加到清单文件已修复的错误中。
<application
...
...
android:requestLegacyExternalStorage="true">
</application>