当前位置: 首页 > 知识库问答 >
问题:

如何修复“权限被拒绝”?[复制]

李凯定
2023-03-14

我正试图将位图保存到文件中,但android studio抛出了一个异常java。io。FileNotFoundException:/storage/simulated/0/Pictures/savedBitmap。png(权限被拒绝)我做错了什么?

public void save(){
        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "savedBitmap.png");
        if (file.exists()){
            Log.i(TAG, "file is exists");
        } else {
            Log.i(TAG, "file is not exists");
        }
        try {
            FileOutputStream fos = null;
            try {
                fos = new FileOutputStream(file);
                mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            } finally {
                if (fos != null) fos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    2019-04-30 13:03:03.058 22470-22470/com.example.paint I/PaintView: file is not exists
    2019-04-30 13:03:03.059 22470-22470/com.example.paint W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Pictures/savedBitmap.png (Permission denied)

共有2个答案

凌经赋
2023-03-14

你得用WRITE_EXTERNAL_STORAGE许可

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

运行时权限

if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(context, " Allow the Storage Permission", Toast.LENGTH_LONG).show();
                    ActivityCompat.requestPermissions((Activity) context,
                            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                            MY_PERMISSIONS_CONSTANT);
                    return false;
}
华懿轩
2023-03-14

您需要首先添加android。准许写入外部存储和android。准许AndroidManifest的READ\u EXTERNAL\u存储权限。xml。然后,编程需要检查活动的onCreate()方法中是否启用了这些权限。您可以按如下方式执行。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

        List<Integer> lPermission = new ArrayList<>();
        List<String> stringPermissionList1 = getPermissionList();
        for (int i = 0; i < stringPermissionList1.size(); i++) {
            lPermission.add(ContextCompat.checkSelfPermission(activity, stringPermissionList1.get(i)));
        }
        boolean bPermissionDenied = false;
        for (int i = 0; i < lPermission.size(); i++) {
            int a = lPermission.get(i);
            if (PackageManager.PERMISSION_DENIED == a) {
                bPermissionDenied = true;
                break;
            }
        }


        if (bPermissionDenied) {


            String sMessage = "Please allow all permissions shown in upcoming dialog boxes, so that app functions properly";
   //make request to the user         
List<String> stringPermissionList = getPermissionList();
            String[] sPermissions = stringPermissionList.toArray(new String[stringPermissionList.size()]);

            //request the permissions
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(sPermissions, PERMISSION_REQUEST_CODE);
            }
        } else {
           doFurtherProcessing();
        }


    } else {
      doFurtherProcessing();

    }
}



private List<String> getPermissionList(){
    List<String> stringPermissionList=new ArrayList<>();

 stringPermissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
    stringPermissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    return  stringPermissionList;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        boolean isAllPermissionGranted = true;

        for (int i = 0; i < grantResults.length; i++) {
            int iPermission = grantResults[i];
            if (iPermission == PackageManager.PERMISSION_DENIED) {
                isAllPermissionGranted = false;
                break;
            }
        }
        if (isAllPermissionGranted) {
            doFurtherProcessing();
        } else {
            // Prompt the user to grant all permissions
        }

}

希望这能有所帮助

 类似资料:
  • 问题内容: 我在装有Ubuntu OS的计算机上安装了Docker。在安装docker之后,当我运行时 没关系,但是我想隐藏单词以使命令更短。 如果我写的命令没有这个词 显示以下内容: 当我尝试制作时也是如此 我该如何解决? 问题答案: 如果要以非root用户身份运行docker,则需要将其添加到docker组。 创建docker组(如果不存在) $ sudo groupadd docker 将您

  • 一切正常,但我想隐藏单词以使命令更简短。 如果我在编写命令时没有单词 显示以下内容: Docker:尝试连接到unix上得Docker后台程序套接字时获得得权限被拒绝:///var/run/Docker.sock:Post http://%2fvar%2frun%2fdocker.sock/v1.35/containers/create:拨号unix/var/run/Docker.sock:con

  • } 有人能帮帮我吗?因为我已经在这里待了很长时间了?任何帮助都将不胜感激谢谢

  • 我在运行docker compose时得到了这个

  • 问题内容: 当我尝试运行简单的docker命令时,例如: 我收到一条错误消息: 获得权限被拒绝… /var/run/docker.sock:connect:权限被拒绝 当我检查权限 我看到这一行: 因此,我遵循许多论坛的建议并将本地用户添加到docker组: 但这无济于事。我仍然收到非常相同的错误消息。我该如何解决? 问题答案: 对于那些刚接触shell的人,命令: 需要在您的外壳中定义。默认情况

  • 问题内容: 尝试显示URI时出现以下异常。我认为这是在我的活动停止后发生的,我尝试再次访问可行的URI。还有其他问题可以解决这个问题,但是我对如何对我的代码应用任何解决方案感到非常困惑,因为我的takePhotoIntent允许拍照或从图库中选择图片(如下所示)。 我的createImageFile和我的takePhotoIntent: 问题答案: 根据Storage Access Framewo