今天在实现录音功能的权限申请时遇到了问题,然后网上找资料,基本都是分割线下面的解决方法,但是在我的Smartisan OS V3.7.0.2(android 6.0  23), 项目中target sdk version设置为了22。

令人疑惑的是 录音权限在设置为每次询问时,PermissionChecker#checkSelfPermission总是返回PERMISSION_GRANTED,让我调试的开始怀疑人生了,我找了一台android 7.0的原生的手机就是ok的,当然原生的手机只有录音权限只有开和关两项,并没有每次询问,我初步怀疑是厂商的代码导致的该问题

在录音的时候,针对录制的过程还是要加try catch进行捕获异常,防止由于没有权限导致崩溃,其他权限可以类似处理,根据catch到的异常进行处理,优化用户体验。

------------------------------------------------------------分割线---------------------------------------------------------------------

以下内容引自其他博客:

Android M运行targetSdkVersion < 23的应用时,调用checkSelfPermission,不管用户是否取消授权,checkSelfPermission的返回值始终为PERMISSION_GRANTED的解决办法


  1. If your application is targeting an API level before 23 (android M) then both:ContextCompat#checkSelfPermission and Context#checkSelfPermission doesn't work and always returns 0 (PERMISSION_GRANTED). Even if you run the application on Android 6.0 (API 23).

  2. It's not fully true that if you targeting an API level before 23 then  you don't have to take care of permissions. If you targeting an API level before 23 then:

    • Android < 6.0: Everything will be ok.

    • Android 6.0: Application's run-time permissions will be granted by default (compatibility mode applies), but the user can change run-time permissions in Android Settings, then you may have a problem.

  3. As I said in the 1st point, if you targeting an API level before 23 on Android 6.0 then ContextCompat#checkSelfPermission and Context#checkSelfPermission doesn't work. Fortunately you can use PermissionChecker#checkSelfPermission to check run-time permissions.

Example code:


[html] view plaincopy
  1. public boolean selfPermissionGranted(String permission) {
  2. // For Android < Android M, self permissions are always granted.
  3. boolean result = true;
  4. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  5. if (targetSdkVersion >= Build.VERSION_CODES.M) {
  6. // targetSdkVersion >= Android M, we can
  7. // use Context#checkSelfPermission
  8. result = context.checkSelfPermission(permission)
  9. == PackageManager.PERMISSION_GRANTED;
  10. } else {
  11. // targetSdkVersion < Android M, we have to use PermissionChecker
  12. result = PermissionChecker.checkSelfPermission(context, permission)
  13. == PermissionChecker.PERMISSION_GRANTED;
  14. }
  15. }
  16. return result;
  17. }

In order to obtain target Sdk Version you can use:

[html] view plaincopy
  1. try {
  2. final PackageInfo info = context.getPackageManager().getPackageInfo(
  3. context.getPackageName(), 0);
  4. targetSdkVersion = info.applicationInfo.targetSdkVersion;
  5. } catch (PackageManager.NameNotFoundException e) {
  6. e.printStackTrace();
  7. }

It works on Nexus 5 with Android M.

---------------------------------------------------------------------------分割线----------------------------------------------------------------------

checkSelfPermission总是返回PERMISSION_GRANTED相关推荐

  1. Android 6.0 运行时权限处理完全解析

    一.概述 随着Android 6.0发布以及普及,我们开发者所要应对的主要就是新版本SDK带来的一些变化,首先关注的就是权限机制的变化.对于6.0的几个主要的变化,查看查看官网的这篇文章http:// ...

  2. Android 6.0动态权限

    新项目,新苦B开始, 从Android 6.0(API 23)开始,允许用户在应用运行时决定是否允许权限,而不是在应用安装的时候.这种方法简化了应用的安装过程,因为用户在安装或更新应用的时候不需要允许 ...

  3. android 权限动态申请

    名字其实有点让人感觉高大上"权限动态申请",其实也没有什么, 以前做Android程序的时候,比如需要打开摄像头 那么需要在 然后就可以了, 但是Android6.0之后呢,有些权 ...

  4. Android M 新的运行时权限开发者需要知道的一切

    android M 的名字官方刚发布不久,最终正式版即将来临! android在不断发展,最近的更新 M 非常不同,一些主要的变化例如运行时权限将有颠覆性影响.惊讶的是android社区鲜有谈论这事儿 ...

  5. Android M(6.0) 权限相关

    原文链接:http://jijiaxin89.com/2015/08/30/Android-s-Runtime-Permission/ Android M 新的运行时权限开发者需要知道的一切 andr ...

  6. android新运行时权限

                                                    新运行时权限 android的权限系统一直是首要的安全概念,因为这些权限只在安装的时候被询问一次.一旦安 ...

  7. android 崩溃捕获_Android从相机和图库捕获图像

    android 崩溃捕获 In this tutorial we'll develop an application that picks an image from camera or galler ...

  8. Android Location API跟踪您当前的位置

    Android Location API can be used to track your mobile current location and show in the app. In this ...

  9. Android Studio实现文字识别(基于百度云OCR)

    前言:之前配置好Android Studio后,一直在参与课程的两个项目,未能及时更新,最近期末考试,可能又要断更一段时间.今天验收好,跟大家分享一下其中我负责的相机相册调用以及文字识别的部分,大家根 ...

  10. Adroid11,拍照,裁剪以及保存图片

    目录 1. 文件权限问题 2. 拍照权限和布局文件 3. 一些用的上的工具函数 4. 结果展示 完成毕业设计的需要,Android11要求实现图片拍照并裁剪,例如头像的选取.真机redmi k20:A ...

最新文章

  1. linux设置开机服务自动启动/关闭自动启动命令
  2. CSS兼容性(IE和Firefox)技巧大全
  3. 【2015沈阳现场A】
  4. [easyui] 在iframe中操作父窗口的组件
  5. javascript系列之执行上下文
  6. netty 远程主机强迫关闭了一个现有的连接_死磕netty系列《一、netty基础概念》...
  7. 设计模式之代理:手动实现动态代理,揭秘原理实现
  8. 计算机的数据库应用领域,【信息管理论文】信息管理中计算机数据库技术的应用(共4410字)...
  9. springboot2.0新特性
  10. Redis高并发5-redis数据持久化之企业应用
  11. Python-docx 读取word.docx内容
  12. 人脸识别系统落地酒店 刷脸入住更安全
  13. java获取异常行数,如何增加Java堆栈跟踪转储的显示行数?
  14. 一文详解Adobe Photoshop 2020安装教程
  15. 4本建模必读的书籍,每天学一点,获益匪浅
  16. 悠哈牛奶糖为什么有五种味道单独装的,而不是混合装的
  17. 计算特征根时出现复数 ComplexWarning: Casting complex values to real discards the imaginary part
  18. 如何使用Dart的Stream(一)
  19. python刷步数程序设计_利用python+云函数搭建自己的修改步数api接口
  20. Python 分析近2000条“数据分析”相关岗位招聘信息

热门文章

  1. 走近棒球运动·堪萨斯城皇家队·MLB棒球创造营
  2. Fishermen Gym - 101964E(二分+前缀数组)
  3. 想要快速、免费的翻译外文PDF文档?Get翻译神器
  4. 微信上的音乐怎么传到计算机上,如何把微信的歌传到电脑上
  5. android对话框activity,Android使用Activity用作弹出式对话框
  6. 首先感谢IQueBrew小组
  7. mysql左右匹配原则的用法和理解
  8. 正三角java_Java中的的画正三角方法
  9. WebRTC的拥塞控制和带宽策略
  10. 大数据分析应用的九大领域