我有关于 Android 6 (Marshmallow) 运行时权限的问题。如果用户想从图库中挑选照片,我们应该征求READ_EXTERNAL_STORAGE
许可吗?
即使我关闭了存储权限,似乎我也可以访问画廊。
我有关于 Android 6 (Marshmallow) 运行时权限的问题。如果用户想从图库中挑选照片,我们应该征求READ_EXTERNAL_STORAGE
许可吗?
即使我关闭了存储权限,似乎我也可以访问画廊。
您需要询问 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()
对于自定义权限,如果您使用的是 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