Android 保存图像时java.io.FileNotFoundException权限被拒绝
我将此添加到我的AndroidManifests中:Android 保存图像时java.io.FileNotFoundException权限被拒绝,android,Android,我将此添加到我的AndroidManifests中: private void saveImage(Bitmap bitmap){ try { String path = Environment.getExternalStorageDirectory().toString(); Toast.makeText(getActivity(), path, Toast.LENGTH_SHORT).show(); OutputStream fOut
private void saveImage(Bitmap bitmap){
try {
String path = Environment.getExternalStorageDirectory().toString();
Toast.makeText(getActivity(), path, Toast.LENGTH_SHORT).show();
OutputStream fOut = null;
File file = new File(path, mWallpaper.getId().toString() + ".jpg");
fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // saving the Bitmap to a file compressed as a JPEG with 85% compression rate
fOut.flush();
fOut.close();
MediaStore.Images.Media.insertImage(getActivity().getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
} catch (MalformedURLException e) {
Toast.makeText(getActivity(), "Error saving wallpaper. MAL", Toast.LENGTH_SHORT).show();
} catch (IOException e1) {
Toast.makeText(getActivity(), "Error saving wallpaper.", Toast.LENGTH_SHORT).show();
e1.printStackTrace();
}
}
我已经为我的片段将其添加到onCreate()中,但我仍然不是一个请求
int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
permissionCheck);
}
}
如果您使用的是>=API23,请执行此操作。在此之后添加您的代码。使用此代码可以向用户请求运行时权限
如果您使用的是>=API23,请执行此操作。在此之后添加您的代码。使用此代码可以向用户请求运行时权限
试试这个,你也可以按照福林链接
试试这个,你也可以按照福林链接
另一个解决方案是使用
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},23
);
}
}
而不是
getApplicationContext().getFilesDir().getPath()
如果实现此解决方案,则不需要添加任何清单权限,因为您的文件保存在应用程序目录中,而不是SD卡中 另一个解决方案是使用
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},23
);
}
}
而不是
getApplicationContext().getFilesDir().getPath()
如果实现此解决方案,则不需要添加任何清单权限,因为您的文件保存在应用程序目录中,而不是SD卡中 你使用的是什么android版本?android 6.0+的工作原理与旧版本稍有不同。添加完整的logcat。此外,如果您的android版本为6.0+您必须实施运行时权限检查。要使代码正常工作,只需转到设备设置、应用程序、应用程序并允许权限。是否已添加外部存储的动态权限@TQL,玩得开心;)你使用的是什么android版本?android 6.0+的工作原理与旧版本稍有不同。添加完整的logcat。此外,如果您的android版本为6.0+您必须实施运行时权限检查。要使代码正常工作,只需转到设备设置、应用程序、应用程序并允许权限。是否已添加外部存储的动态权限@TQL,玩得开心;)不完全正确,但想法就在这里。如果他在该块之后添加代码,这将不起作用,因为响应是异步的。PS:您可以在评论部分找到该文档的链接,我刚刚添加了它,提供完整文档总是很好的;)@阿克塞尔,你说得对。我将在我的答案中添加这个链接。虽然不完全正确,但想法就在这里。如果他在该块之后添加代码,这将不起作用,因为响应是异步的。PS:您可以在评论部分找到该文档的链接,我刚刚添加了它,提供完整文档总是很好的;)@阿克塞尔,你说得对。我将在我的答案中添加此链接。是否有否决投票的原因?我猜1)答案只有代码2)答案重复3)没有来源。您可能可以改进您的答案;)他说简洁是可以接受的,但更全面的解释更好。所以downvote是可以接受的,不是很好,现在你有了一些解释,但只通过一个链接,请再次参阅关于链接的帮助;)您应该提取信息,以防此链接消亡(不是官方文档链接将来消亡的风险更大),简单答案和良好答案之间的差异很小;)对不起,如果我在这里有点挑剔,有什么理由拒绝投票吗?我猜1)只写代码答案2)答案重复3)没有来源。您可能可以改进您的答案;)他说简洁是可以接受的,但更全面的解释更好。所以downvote是可以接受的,不是很好,现在你有了一些解释,但只通过一个链接,请再次参阅关于链接的帮助;)您应该提取信息,以防此链接消亡(不是官方文档链接将来消亡的风险更大),简单答案和良好答案之间的差异很小;)抱歉,如果我在这里有点挑剔,这可能是将其放入外部存储器的要求;)这可能是将其放入外部存储器的要求;)
Environment.getExternalStorageDirectory()