过去很长的一段时间里面,我一直坚持使用UtilCode这个库,里面继承了非常多的开发中常用的方法,省去了自己自行从别的地方捞取以前的代码。
//utils
implementation 'com.blankj:utilcode:1.24.2'
动态权限我用的也是其中的方法,
PermissionUtils.permission(PermissionConstants.MICROPHONE).callback(new PermissionUtils.SimpleCallback() {
@Override
public void onGranted() {
//业务代码
}
@Override
public void onDenied() {
ToastUtils.showShort("请设置麦克风权限");
}
}).request();
蛮简便的写法,但是在我测试的时候出现了问题。以前都能使用的代码莫名其妙就出现了问题,排查了很久之后找到了原因。测试机被人换了,换成了vivo,像是国内这些深度定制的系统有时候真的让人非常头疼,不能说故作聪明,但是真的造成了很大的困扰,具体原因是什么呢?正常手机的系统在我们申请权限时候会弹出dialog让用户选择,但是这个vivo系统没有,而是一段时间后才弹出来,这就非常难受了,因为没有弹窗并直接走onGranted()导致直接执行业务代码,但是业务代码涉及到一些时效性比较高的操作,矛盾就出来了,气的想打人。。。
后来发现,vivo系统只有在onGranted()方法中立即使用到相关权限,才能立即弹出,换句话说就是只有在真正使用的时候才弹出,那我只好在业务代码之前加入这些了,
MediaRecorder mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.release();
大概就是这么一个思路,如果有更好的方法请告之,感激不尽。