gpt4 book ai didi

java - 在某些设备上录制音频时出现 Android IllegalStateException

转载 作者:行者123 更新时间:2023-12-01 12:28:17 26 4
gpt4 key购买 nike

我希望我的程序录制音频 10 秒,然后停止并将我的记录存储在文件存储中,在我的 Nexus 4 和 Galaxy S 5 上一切正常,但当我在 Galaxy S3 中测试它时,它会崩溃并引发错误

10-02 02:13:44.942 1279-1279/com.taptester.tappapp E/AudioCaptureDemo:准备()失败
10-02 02:13:44.942 1279-1279/com.taptester.tappapp E/MediaRecorder:在无效状态下调用:4
10-02 02:13:44.942 1279-1279/com.taptester.tappapp D/AndroidRuntime: 关闭虚拟机
10-02 02:13:44.942 1279-1279/com.taptester.tappapp W/dalvikvm:threadid = 1:线程退出时未捕获异常(组= 0xb1a12ba8)
10-02 02:13:44.952 1279-1279/com.taptester.tappapp E/AndroidRuntime:致命异常:主要
进程:com.taptester.tappapp,PID:1279
java.lang.IllegalStateException
在 android.media.MediaRecorder.start( native 方法)
在 com.taptester.tappapp.MainActivity.startRecording(MainActivity.java:203)
在 com.taptester.tappapp.MainActivity.access$300(MainActivity.java:62)
在 com.taptester.tappapp.MainActivity$6.onFinish(MainActivity.java:825)
在 android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118)
在 android.os.Handler.dispatchMessage(Handler.java:102)
在 android.os.Looper.loop(Looper.java:136)
在 android.app.ActivityThread.main(ActivityThread.java:5017)
在 java.lang.reflect.Method.invokeNative( native 方法)
在 java.lang.reflect.Method.invoke(Method.java:515)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
在dalvik.system.NativeStart.main( native 方法)

首先我认为错误出在文件名中,我这样声明:

public MainActivity() {
mFileName = Environment.getExternalStorageDirectory() + File.separator
+ Environment.DIRECTORY_DCIM + File.separator + "MyMemo.3gp";
//Environment.getExternalStorageDirectory().getAbsolutePath();
//mFileName += "/MyMemo.3gp";
}

然后我做了这样的记录:

private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

try {
mRecorder.prepare();
mRecorder.start();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}


}

然后我像这样调用“StartRecording”方法:

else if(command.equals("2")) {

startRecording();

Toast.makeText(getApplicationContext(), "Start recording...",
Toast.LENGTH_SHORT).show();

CountDownTimer start = new CountDownTimer(timer, 1000) {

@Override
public void onTick(long l) {
Toast.makeText(getApplicationContext(), "Recording!!!",
Toast.LENGTH_SHORT).show();

}

@Override
public void onFinish() {
stopRecording();

}
}.start();

最佳答案

  1. 你不应该调用 mRecorder.start();当 mRecorder.prepare();失败。

这就是导致抛出非法状态异常的原因。

  • 并非所有设备都支持所有编码格式。尝试更改这些 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);和 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  • 将格式和编码器更改为您的 s3 设备支持的文件格式和编码格式。

    首先,将您的编码设置更改为默认设置,如下所示,然后尝试是否有效。 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

    关于java - 在某些设备上录制音频时出现 Android IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26156451/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com