请求运行时权限时检查 Android 版本

Posted

技术标签:

【中文标题】请求运行时权限时检查 Android 版本【英文标题】:Checking Android version when requesting runtime permission 【发布时间】:2017-09-24 03:27:55 【问题描述】:

我最近更新了 android 应用程序的代码,以请求 Android 6.0+ 的权限。 但是,我现在面临如何检查权限的两难选择。

我在网上看到有人在检查权限之前检查操作系统版本,因为23之前的版本,由于它们是在安装时授予的,所以不需要检查权限。

现在我的支票是这样的,

if(checkPermissions())
    doThings();
 else 
    requestPermissions();

但我应该努力添加这个吗?

if (Build.VERSION.SDK_INT >= 23) 
    if(checkPermissions())
        doThings();
     else 
        requestPermissions();
    
 else 
    doThings();

我不明白将后者添加到代码中的意义,因为据我了解,旧版本的 android 可以很好地运行第一个示例代码。

这让我想问,在这种情况下检查Android版本有好处吗?

【问题讨论】:

【参考方案1】:

但我应该努力添加这个吗?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
    if(checkPermissions())
        doThings();
     else 
        requestPermissions();
    
 else 
    doThings();

如果 checkPermissions()requestPermissions() 严格调用 API 23 或更高版本的类或方法,您应该这样做。否则,您可以随心所欲。

这让我想问,在这种情况下检查Android版本有好处吗?

据我所知,鉴于我上面所说的,验证本身是不必要的。所以这个检查只是一个消耗性的if 子句,会弄乱你的代码。

【讨论】:

【参考方案2】:
ContextCompact.checkSelfPermission

在 android 版本 PERMISSION_GRANTED。 所以你可以避免检查构建版本。 更多信息here

【讨论】:

我没有在您提供的链接中看到它明确写出,如果您正在检查您实际上没有的权限,这将是一种奇怪的行为,即使它在 android 中没有意义低于23. 无论如何,这并不能回答问题,但感谢您提供的信息!

以上是关于请求运行时权限时检查 Android 版本的主要内容,如果未能解决你的问题,请参考以下文章

Android 6.0+ 运行时权限——EasyPermissions源码解析

Android运行时权限对话框未显示

谈谈Android 6.0运行时权限理解

请求权限/Android Studio 时应用程序崩溃

在运行时请求权限,Android M+

如何在 android Unity 应用程序中禁用 android 运行时位置权限提示