gpt4 book ai didi

安卓停止录音失败

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:01 30 4
gpt4 key购买 nike

我要启动一个服务来开始录音。当我试图停止时,它显示以下消息

06-27 17:21:30.138: E/MediaRecorder(6122): stop called in an invalid state: 0

我不确定上传数据到服务器等其他功能是否会影响结果(未在Asyck Task中实现,仅调用方法)

如果我没有捕获运行时异常,有时它可能会显示处理程序异常(结束 Activity ,停止记录)

06-27 17:32:35.988: W/System.err(6818): java.lang.IllegalStateException
06-27 17:32:35.988: W/System.err(6818): at android.media.MediaRecorder.stop(Native Method)
06-27 17:32:35.988: W/System.err(6818): at tvbpv.test.EOrderSystem1.RecordService.stopRecording(RecordService.java:109)
06-27 17:32:35.988: W/System.err(6818): at tvbpv.test.EOrderSystem1.RecordService.onDestroy(RecordService.java:46)
06-27 17:32:35.988: W/System.err(6818): at android.app.ActivityThread.handleStopService(ActivityThread.java:2401)
06-27 17:32:35.988: W/System.err(6818): at android.app.ActivityThread.access$2000(ActivityThread.java:127)
06-27 17:32:35.988: W/System.err(6818): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1225)
06-27 17:32:35.988: W/System.err(6818): at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 17:32:35.988: W/System.err(6818): at android.os.Looper.loop(Looper.java:137)
06-27 17:32:35.988: W/System.err(6818): at android.app.ActivityThread.main(ActivityThread.java:4519)
06-27 17:32:35.988: W/System.err(6818): at java.lang.reflect.Method.invokeNative(Native Method)
06-27 17:32:35.988: W/System.err(6818): at java.lang.reflect.Method.invoke(Method.java:511)
06-27 17:32:35.988: W/System.err(6818): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
06-27 17:32:35.988: W/System.err(6818): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
06-27 17:32:35.988: W/System.err(6818): at dalvik.system.NativeStart.main(Native Method)

开始录制

06-28 09:14:47.646: E/MediaRecorder(3089): start failed: -38
06-28 09:14:47.646: W/System.err(3089): java.lang.IllegalStateException
06-28 09:14:47.646: W/System.err(3089): at android.media.MediaRecorder.start(Native Method)
06-28 09:14:47.646: W/System.err(3089): at tvbpv.test.EOrderSystem1.RecordService.startRecording(RecordService.java:87)
06-28 09:14:47.646: W/System.err(3089): at tvbpv.test.EOrderSystem1.RecordService.onStart(RecordService.java:49)
06-28 09:14:47.646: W/System.err(3089): at android.app.Service.onStartCommand(Service.java:438)
06-28 09:14:47.646: W/System.err(3089): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2371)
06-28 09:14:47.646: W/System.err(3089): at android.app.ActivityThread.access$1900(ActivityThread.java:127)
06-28 09:14:47.646: W/System.err(3089): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1222)
06-28 09:14:47.646: W/System.err(3089): at android.os.Handler.dispatchMessage(Handler.java:99)
06-28 09:14:47.646: W/System.err(3089): at android.os.Looper.loop(Looper.java:137)
06-28 09:14:47.646: W/System.err(3089): at android.app.ActivityThread.main(ActivityThread.java:4519)
06-28 09:14:47.646: W/System.err(3089): at java.lang.reflect.Method.invokeNative(Native Method)
06-28 09:14:47.646: W/System.err(3089): at java.lang.reflect.Method.invoke(Method.java:511)
06-28 09:14:47.646: W/System.err(3089): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
06-28 09:14:47.646: W/System.err(3089): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
06-28 09:14:47.646: W/System.err(3089): at dalvik.system.NativeStart.main(Native Method)

下面是我的代码

RecordService.java


private MediaRecorder recorder;
private File instanceRecord;
private boolean recording= false;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}



@Override
public void onStart(Intent intent, int startId) {
startRecording();
super.onStart(intent, startId);
}



@Override
public void onDestroy() {
stopRecording();
super.onDestroy();
}

private void prepareRecording()
{
try
{
recorder.prepare();
}
catch(IllegalStateException e)
{
e.printStackTrace();

}
catch (IOException e)
{
e.printStackTrace();
}
}

public void startRecording(){

try {

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

Date today = Calendar.getInstance().getTime();
Format formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
String reportDate = formatter.format(today);


File instanceRecordDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "TVB_PV_recordings");

if(!instanceRecordDirectory.exists()){
instanceRecordDirectory.mkdirs();
}

instanceRecord = new File(instanceRecordDirectory.getAbsolutePath() + File.separator + reportDate + "_sales_recording.mp4");
if(!instanceRecord.exists()){
instanceRecord.createNewFile();
}

recorder.setOutputFile(instanceRecord.getAbsolutePath());
prepareRecording();
recorder.start();
recording = true;

} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}

public void stopRecording() {
if (recorder != null) {
try {
recorder.stop();
} catch(RuntimeException e) {
instanceRecord.delete(); //you must delete the outputfile when the recorder stop failed.
} finally {
recorder.release();
recorder = null;
}
}
}


Other Activity:

stopService(new Intent(EOrderSystemSubmit.this, RecordService.class));

最佳答案

http://developer.android.com/reference/android/media/MediaRecorder.html - 非常仔细地查看主题开头的图表。我敢肯定,您在录制未开始时调用停止。

Stops recording. Call this after start(). Once recording is stopped, you will have to configure it again as if it has just been constructed. Note that a RuntimeException is intentionally thrown to the application, if no valid audio/video data has been received when stop() is called. This happens if stop() is called immediately after start(). The failure lets the application take action accordingly to clean up the output file (delete the output file, for instance), since the output file is not properly constructed when this happens.

Throws IllegalStateException if it is called before start()

这是文档所说的。

关于安卓停止录音失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339453/

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