Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 保存图像时java.io.FileNotFoundException权限被拒绝_Android - Fatal编程技术网

Android 保存图像时java.io.FileNotFoundException权限被拒绝

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

我将此添加到我的AndroidManifests中:

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()