【问题标题】:Android API 23 Read_external_storage Permission IssueAndroid API 23 Read_external_storage 权限问题
【发布时间】:2016-05-10 11:04:46
【问题描述】:

我正在使用下面的代码。但是当我单击添加照片按钮时什么也没有发生。在 println 中,我看到了 4 号和 5 号。我做错了什么吗?我正在使用片段内的代码。任何帮助都会很棒。

int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE;

// define in class
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    System.out.println("number 2");
    // We have access. Life is good.
} else if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)) {
    System.out.println("number 3");
    // We've been denied once before. Explain why we need the permission, then ask again.
} else {
    System.out.println("number 4");
    // We've never asked. Just do it.
    ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
    System.out.println("number 5");
}

回调部分如下:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        // We got the permission

        System.out.println("number 6");

    } else {

        System.out.println("number 7");

        // We were not granted permission this time, so don't try to show the contact picker
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

编辑:

我编辑我的代码如下,现在我在 println 日志中看到数字 4、5、7 和 8。没有错误,但什么都没有发生。不应该打开一个对话框要求用户授予权限吗?我使用带有 api 19 的 nexus 6 作为模拟器。

private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 7;
// define in class

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    System.out.println("number 2");
    // We have access. Life is good.
} else if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)) {
    System.out.println("number 3");
    // We've been denied once before. Explain why we need the permission, then ask again.
} else {
    System.out.println("number 4");
    // We've never asked. Just do it.
    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
    System.out.println("number 5");
}

回调部分如下:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        // We got the permission

        System.out.println("number 6");

    } else {

        System.out.println("number 7");

        // We were not granted permission this time, so don't try to show the contact picker
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        System.out.println("number 8");
    }
}

编辑 2:

我没有添加manifest的权限,我添加了<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />,现在看起来还可以。

【问题讨论】:

    标签: android android-camera android-permissions


    【解决方案1】:

    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE 必须是具有值 to 的静态 int,以便检查多个权限并返回有效的比较结果。

    【讨论】:

    • 您好 Mohammad,MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE 的值应该是多少,您能否举例说明如何定义它?顺便说一句,非常感谢。
    • 任何你想要的整数。这个变量是用来区分不同权限的,所以你需要给每个请求权限一个不同的值,这样你就可以知道你是从哪里得到响应的。
    • Mohammad 谢谢你的链接,但我已经在关注它了。但是在片段中使用时,我猜它有点不同。顺便说一句,我如上所述更新了我的代码,但现在什么也没有发生,没有错误。它正在到达回调方法,但是不应该打开一个对话框并授予权限吗?
    • 好的,我没有添加清单权限,我添加了 现在看起来没问题。顺便谢谢你。
    猜你喜欢
    • 2015-12-02
    • 2022-12-05
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多