Android本身有提供checkPermission(String, String)
这一系列的函数来检查某个程序是否有某个权限。但这系列数实际上是在检查AndroidManifest里那user-permission
里是否写上了某个权限。大家都知道,这根本行不通,因为安装时那些权限根本没地方让用户部分接受。用户要么全接受一个普通的程序居然有定位读通讯录删除短信这种权限,要么就完全的不能装这个程序了。在一些android机子上,比如华为,会有权限管理这一项。里面可以将程序的一些权限关掉,比如定位、读通讯录、相机还有录音之类的。这个设置就无法通过checkPermission(String, String)
这一系列的函数来得到正确的结果了。
本人在项目中还没有用到通讯录权限,但有用到相机与录音,于是本文就集中于相机与录音的权限判断上了。其实代码很简单,具体做法就是在实际操作前先操作一遍录音与相机,看是否能得到结果,如果不能就说明对应的权限没有开放,以下为代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public boolean hasPermission(String permission) { switch (permission) { case Manifest.permission.CAMERA: try { Camera camera = Camera.open(); camera.release(); return true; } catch (RuntimeException e) { return false; } case Manifest.permission.RECORD_AUDIO: MediaRecorder recorder = new MediaRecorder(); recorder.reset(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); String file = Dict.FILE_PATH.USER_CHAT + SysUtils.getRandomString() + ".aac"; recorder.setOutputFile(file); try { recorder.prepare(); recorder.start(); File soundFile = new File(file); return soundFile.exists(); } catch (IllegalStateException | IOException e) { return false; } finally { recorder.stop(); recorder.release(); } default: return getApplication().getPackageManager().checkPermission(permission, MedicalApp.getInstance().getPackageName()) == PackageManager.PERMISSION_GRANTED; }
}
|
这里就只实现了相机与录音两个权限的判断,其它的判断等到要使用时再更新。