Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 录音在某些设备中不起作用_Android_Audio Recording_Illegalstateexception_Background Service_Audiorecord - Fatal编程技术网

Android 录音在某些设备中不起作用

Android 录音在某些设备中不起作用,android,audio-recording,illegalstateexception,background-service,audiorecord,Android,Audio Recording,Illegalstateexception,Background Service,Audiorecord,我正在使用android AudioRecorder录制音频,但它在华为和oppo等设备上不起作用,我正在后台服务中录制5秒钟的音频。 启动录制功能为: private void startRecording(File file) { if (mediaRecorder != null) { mediaRecorder.reset(); mediaRecorder.release(); } mediaRecorder = new Media

我正在使用android AudioRecorder录制音频,但它在华为和oppo等设备上不起作用,我正在后台服务中录制5秒钟的音频。 启动录制功能为:

private void startRecording(File file) {
    if (mediaRecorder != null) {
        mediaRecorder.reset();
        mediaRecorder.release();
    }
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
   // mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
    //mediaRecorder.setOutputFile(file.getAbsolutePath());

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
        mediaRecorder.setAudioEncodingBitRate(48000);
    } else {
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mediaRecorder.setAudioEncodingBitRate(64000);
    }
    mediaRecorder.setAudioSamplingRate(16000);
    mediaRecorder.setOutputFile(file.getAbsolutePath());

    try {
        mediaRecorder.prepare();
        mediaRecorder.start();
    } catch (IOException e) {
        Log.e("giftlist", "io problems while preparing [" +
                file.getAbsolutePath() + "]: " + e.getMessage());
    }
}
停止录制功能

private void stopRecording() {
    if (mediaRecorder != null) {
        mediaRecorder.stop();
        mediaRecorder.reset();
        mediaRecorder.release();
        mediaRecorder = null;
    }
}
这就是期望

java.lang.IllegalStateException at android.media.MediaRecorder._stop(Native Method)

它给出了非法堆栈异常。如何解决这个问题?我想在所有设备中运行它

是否检查了录制音频的运行时权限?如果有异常,请发布堆栈跟踪。是,设置了所有权限需要按预定义顺序调用媒体录制器方法。如果任何方法将切换位置,它将开始抛出非法状态异常。您可以通过“媒体录制器非法状态异常”进行搜索,并将在谷歌上获得结果。请检查上述代码,并告诉我序列是否正确或错误。因为它在三星设备上工作