5

我有关于 Android 6 (Marshmallow) 运行时权限的问题。如果用户想从图库中挑选照片,我们应该征求READ_EXTERNAL_STORAGE许可吗?

即使我关闭了存储权限,似乎我也可以访问画廊。

4

2 回答 2

4

您需要询问 READ_EXTERNAL_STORAGE。您将能够在没有它的情况下访问画廊,但如果您想对从画廊获得的媒体做任何事情,您将需要 READ 权限。

快速测试从图库中选择图像后 onActivityResult 中发生的情况:

权限拒绝:从 pid=8405、uid=10177 读取 com.android.providers.media.MediaProvider uri content://media/external/images/media 需要 android.permission.READ_EXTERNAL_STORAGE 或 grantUriPermission()

于 2015-12-19T20:51:44.680 回答
0

对于自定义权限,如果您使用的是 Android 6.0 或更高版本,则可以使用运行时权限。此代码可能会对您有所帮助。

如果您的应用还没有所需的权限,则应用必须调用 requestPermissions() 方法之一来请求适当的权限。您的应用程序会传递它想要的权限,以及您指定用于标识此权限请求的整数请求代码。该方法异步运行:它立即返回,在用户响应对话框后,系统调用应用程序的回调方法并将结果传递给应用程序传递给 requestPermissions() 的相同请求代码。

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}    

To Know more about runtime permission

https://developer.android.com/training/permissions/requesting.html

于 2016-11-21T18:30:32.580 回答