5.0系统录音权限

来源:互联网 发布:ubuntu 12.04 源 编辑:程序博客网 时间:2024/05/21 11:07

http://blog.csdn.net/self_study/article/details/52965045

public class AudioPermissionCheckUtils {    private static final String TAG = "AudioPermissionCheckUtils";    // 音频获取源    public static int audioSource = MediaRecorder.AudioSource.MIC;    // 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025    public static int sampleRateInHz = 44100;    // 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道    public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;    // 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。    public static int audioFormat = AudioFormat.ENCODING_PCM_16BIT;    // 缓冲区字节大小    public static int bufferSizeInBytes = 0;    /**     * 判断是是否有录音权限     */    public static boolean checkAudioPermission(final Context context) {        bufferSizeInBytes = 0;        bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,                channelConfig, audioFormat);        AudioRecord audioRecord =  new AudioRecord(audioSource, sampleRateInHz,                channelConfig, audioFormat, bufferSizeInBytes);        //开始录制音频        try{            // 防止某些手机崩溃,例如联想            audioRecord.startRecording();        }catch (IllegalStateException e){            e.printStackTrace();//            AVLogUtils.e(TAG, Log.getStackTraceString(e));        }        /**         * 根据开始录音判断是否有录音权限         */        if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING                && audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {//            AVLogUtils.e(TAG, "audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING : " + audioRecord.getRecordingState());            return false;        }        if (audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_STOPPED) {            //如果短时间内频繁检测,会造成audioRecord还未销毁完成,此时检测会返回RECORDSTATE_STOPPED状态,再去read,会读到0的size,可以更具自己的需求返回true或者false            return false;        }        byte[] bytes = new byte[1024];        int readSize = audioRecord.read(bytes, 0, 1024);        if (readSize == AudioRecord.ERROR_INVALID_OPERATION || readSize <= 0) {//            AVLogUtils.e(TAG, "readSize illegal : " + readSize);            return false;        }        audioRecord.stop();        audioRecord.release();        audioRecord = null;        return true;    }}

此方法可以监听到权限的赋予和拒绝

原创粉丝点击