今天在实现录音功能的权限申请时遇到了问题,然后网上找资料,基本都是分割线下面的解决方法,但是在我的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的解决办法
-
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).
-
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.
-
-
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:
In order to obtain target Sdk Version you can use:
It works on Nexus 5 with Android M.
---------------------------------------------------------------------------分割线----------------------------------------------------------------------