Android权限会WRITE_EXTERNAL_STORAGE
触发READ_EXTERNAL_STORAGE
Android M新的授予权限对话框吗?
6 回答
我同意 Guillaume Perrot 的回答。当我写 in 的权限时,我遇到了类似的READ_WRITE_EXTERNAL_STORAGE
问题AndroidManifest.xml
默认情况下,应用程序中没有显示权限,人们需要在应用程序权限中切换存储的切换按钮。然后我将我targetSdkVersion
的输入修改build.gradle
为小于23(MNC)
和其他相关的数字sdkVersion
,安装的应用程序具有权限。
另一种方法是requestpermission
在需要许可的地方编写函数。代码如下:
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)==
PackageManager.PERMISSION_GRANTED) {
//do the things} else {
requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE },
AnyNumber);
因为我的声望不到 15,所以我不能投票给 Guillaume Perrot 的答案。就用这种方式来表达我的想法。
如果检查 Android M 的版本,我解决了添加此问题
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
我的答案是基于我使用模拟器对 M Preview SDK 版本 2 进行的测试。
如果您以MNC
预览 API 级别为目标,WRITE_EXTERNAL_STORAGE
则默认情况下不授予,并且将成为新动态权限 API 的一部分。
您将在设备设置的新应用权限菜单中看到存储权限作为切换按钮,您可以使用它Activity.requestPermissions
来显示该权限的弹出窗口。
但是,如果您的目标 api 级别 < MNC,它不会被归类为危险权限,因此将被授予而用户无法禁用它(未显示在权限设置中),您将无法无论如何编译代码Activity.requestPermissions
,因为预览版 SDK 强制minSdkVersion="MNC"
使用新的 API。
这是与位置权限不同的行为:无论您定位的 API 级别是什么,用户都可以在权限菜单中关闭位置。
对于权限菜单本身,在以下情况下,权限切换状态默认为 ON:
- 目标 API 级别 < MNC。
- 目标 API 级别 = MNC,但您从先前安装的设备上升级应用程序,其中目标 API 级别低于 MNC。
否则,默认情况下您将看到切换为关闭。
希望能帮助到你。
根据文档:
安装时授予的有限权限:当用户安装或更新应用程序时,系统会授予该应用程序应用程序请求的属于 PROTECTION_NORMAL 的所有权限。
所以因为 READ_EXTERNAL_STORAGE 属于 PROTECTION_NORMAL ,它不会触发对话框。
但是因为 WRITE_EXTERNAL_STORAGE 的级别是 PROTECTION_DANGEROUS,它将属于文档中描述的这种行为:
用户在运行时授予权限:当应用程序请求权限时,系统会向用户显示一个对话框,然后调用应用程序的回调函数通知它是否已授予权限。如果用户授予权限,则应用程序将获得该权限功能区域中在应用程序清单中声明的所有权限
以下是保护级别的来源:
根据Android 文档,您不需要请求有关读取和写入外部存储的权限。
编辑:在最新的 Android M 版本中,您需要同时请求读取和写入权限
存储权限属于危险保护级别,因此如果App target SDK设置为23,则在Android M中安装时不会授予所有危险保护级别权限。它们将在运行时授予。是的,这些权限也可以在运行时撤销。
不会自动触发无权限对话框,您需要使用 API(例如 requestPermissions() 方法)发出请求以显示该原生对话框。
请在此处查看危险级别权限列表