美文网首页Android OtherAndroid开发Android技术知识
android录音权限提示体验,自认比较优雅的解决方法!

android录音权限提示体验,自认比较优雅的解决方法!

作者: 轻轻笑声 | 来源:发表于2017-07-11 12:05 被阅读0次

场景:项目仿照github上的一个ChatDemo( https://github.com/Maxi-Mao/ChatDemo ,给出链接感谢作者的开源代码对我项目的帮助!)中的代码实现录音功能,昨晚,发现项目中的录音功能在首次使用时会弹出提示,提示用户是否开启录音权限.随后点击开启后,马上就会提示录音失败,然后再录音也会失败!直到几次后才会成功!如果直接点击拒绝授予权限,则项目会直接崩溃.
分析:可能是由于点击录音的时候,没有权限,导致android系统弹出提示窗,而在弹窗的同时,录音并没有停止.而且录音前缺少了权限的判断才会出现上述问题.
最后和同事尝试了解决后,认为解决方法还可以,决定分享给大家.
思路:在点击录音弹出权限弹窗前,先判断是否开启录音权限.如果没有开启录音权限,就开启一段虚拟(假录音),这时就会弹出权限提示了.而真的录音又没有被触发,只有有权限后真的录音才会被触发.这样就完美的解决了以上问题.
1)首先,定义一个返回boolean值得方法,判断是否已经开启录音权限.

 private  boolean voicePermission(){
        return (PackageManager.PERMISSION_GRANTED ==   ContextCompat.
                checkSelfPermission(MyApplication.appContext, android.Manifest.permission.RECORD_AUDIO));
    }

2)然后再开始点击录音的时候写入

 if (!voicePermission()){//没有权限,自己写一段假的录音代码,这段录音代码其实无效.
                    MediaRecorder recorder = new MediaRecorder();
                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
                    recorder.setAudioChannels(1);
                    recorder.setAudioSamplingRate(8000);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
                    recorder.setOutputFile(DataURI.CreateTempFileName(""));//这里给个假的地址,因为这段录音是无效的.
                    try {
                        recorder.prepare();
                        recorder.start();//要开始录音时,这里就会弹出提示框了,如果不给权限.我们有异常处理,而且下次想录音时 还是会有此提示.
                        recorder.stop();
                        recorder.release();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return false;//这里是因为外层层是一个长按事件,返回false表示处理过了(OnLongClickListener).
                }

......//上述代码后 就是项目中真正的录音代码了.

相关文章

网友评论

    本文标题:android录音权限提示体验,自认比较优雅的解决方法!

    本文链接:https://www.haomeiwen.com/subject/muwphxtx.html