棉花糖权限不适用于低于 23 的 TargetVersion

Posted

技术标签:

【中文标题】棉花糖权限不适用于低于 23 的 TargetVersion【英文标题】:Marshmallow Permissions not working for TargetVersion below 23 【发布时间】:2016-01-18 21:20:19 【问题描述】:

我的项目是一个长期运行的项目。我已将目标版本设置为 10、4 年前。我无法将目标版本更改为 23,因为我正在使用 httpImageCache 并且 UI 也有问题。我的问题是,当 Marshmallow 发布时,我尝试将 Marshmallow 与 targetVersion 10 集成,

 int returnedPermission = ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);

如果我从应用程序设置页面手动打开或关闭存储权限,此功能始终返回“0”。谁能帮帮我?

【问题讨论】:

你能试试那个方法的非兼容版本,'Context.checkSelfPermission'吗? 0 是常量“PackageManager.PERMISSION_GRANTED”。如果未授予,则应返回 'PackageManager.PERMISSION_DENIED' (-1)。 是的,这就是我想要的,当我从 App 设置中关闭时它应该返回 -1,但这个函数总是返回 0。 这可能是兼容性库中的错误。试试标准版,看看结果是否一样。 没有''Context.checkSelfPermission''这样的方法 @Mister Smith,您能否进一步解释一下? 【参考方案1】:

使用PermissionChecker.checkSelfPermission()

当targetSdkVersion

【讨论】:

这是正确答案。我猜 PermissionChecker 在@commonsware 发布他的答案后一段时间就可以使用了【参考方案2】:

正如@Commonware 已经给出了答案,但我在这里添加了更多可能对您有所帮助的问题的细节。 根据官方 android 开发者网站:

如果设备运行的是 Android 5.1 或更低版本,或者您应用的目标 SDK 为 22 或更低:如果您在您的 manifest,用户必须在安装应用程序时授予权限;如果他们不授予权限,则系统根本不会安装该应用程序。

如果设备运行的是 Android 6.0 或更高版本,并且您的应用的目标 SDK 为 23 或更高:应用必须在 manifest,它必须请求它需要的每个危险权限 在应用程序运行时。用户可以授予或拒绝每个权限, 并且应用程序可以继续以有限的功能运行,即使 用户拒绝权限请求。

由于您的目标 SDK 为 10,应用程序将像以前一样完美运行。无论如何请注意,在那之后用户仍然可以撤销权限..!!!虽然 Android 6.0 会在用户尝试这样做时发出警告,但无论如何他们都可以撤销。

以上语句取自official android developer site。

【讨论】:

那么,如果targetVersion低于23,如果用户撤销权限,我什么都做不了,是吗? 当我们在targetSdkVersion小于23的应用上调用需要用户撤销权限的函数时,不会抛出任何异常。相反,它只会什么都不做。对于返回值的函数,它将根据情况返回 null 或 0。尽管应用程序不会因调用函数而崩溃。它可能仍然会因为该应用程序接下来对这些返回值所做的操作而崩溃。【参考方案3】:

谁能帮帮我?

删除该代码,因为它对您无用。如果您的targetSdkVersion 小于 23,则无法确定用户是否撤销了权限。

【讨论】:

所以当用户关闭权限时我什么都做不了。 @neena:正确。如果用户撤销权限,您不应收到任何 SecurityExceptions,但受这些权限保护的 API 应返回空结果(例如,没有 GPS 修复、没有联系人)。

以上是关于棉花糖权限不适用于低于 23 的 TargetVersion的主要内容,如果未能解决你的问题,请参考以下文章

Android棉花糖请求权限?

安卓6.0(棉花糖)新特性汇总

使用后退按钮关闭棉花糖上的权限请求对话框

如何在android中获得相机的权限。(特别是棉花糖)

我可以跳过询问棉花糖的运行时权限吗?

Android 6.0 系统棉花糖新的特性和功能