有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ContextCompat。尽管已授予写入外部存储,checkSelfPermission返回1

在电话设置中授予权限。安卓8.0手机

compileSdkVersion 28
minSdkVersion 16
targetSdkVersion 28

舱单有:

<uses-permission 安卓:name="安卓.permission.READ_EXTERNAL_STORAGE"  />
<uses-permission 安卓:name="安卓.permission.WRITE_EXTERNAL_STORAGE" />

在我的代码中,此“permissions”变量始终等于-1:

int permissions = ContextCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE);

共 (2) 个答案

  1. # 1 楼答案

    好的,感谢Larry Schiefer提供的运行时权限

    考虑到android文档:

    link 1 link 2

    我对链接2中的方法做了一些更改。在执行某些操作之前,它会检查权限,必要时会要求用户确认,在其他情况下,它会强制设置权限

        public void requestRuntimePermission(final Context context, final String manifestPermission, final int requestCode) {
    
            int permissions = ContextCompat.checkSelfPermission(context, manifestPermission);
            if (permissions != PackageManager.PERMISSION_GRANTED) {
    
                if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
                        manifestPermission)) {
    
                    android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(context);
                    builder.setMessage("Allow access?")
                            .setCancelable(true)
                            //Cancel
                            .setNegativeButton("Yes", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                }
                            })
                            //Ok
                            .setPositiveButton("No", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    ActivityCompat.requestPermissions((Activity) context,
                                            new String[]{manifestPermission},
                                            requestCode);
                                }
                            });
                    android.support.v7.app.AlertDialog alert = builder.create();
                    alert.show();
    
                } else {
                    // Permission has not been granted yet. Request it directly.
                    ActivityCompat.requestPermissions((Activity) context, new String[]{manifestPermission},
                            requestCode);
                }
    
            }
        }
    
    

    用法示例:

    requestRuntimePermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE, 0);
    

    requestRuntimePermission中的p.S.requestCode参数可用于标识onRequestPermissionsResult回调中允许的权限。(link 3

  2. # 2 楼答案

    从Android 6(API 23)开始,您还必须在运行时请求此权限。此视频可能有帮助:https://youtu.be/WGz-alwVh8A