如何自动限制 Android 录音长度?
Posted
技术标签:
【中文标题】如何自动限制 Android 录音长度?【英文标题】:How to automatically limit Android audio recording length? 【发布时间】:2012-02-17 00:44:28 【问题描述】:我有这个工作代码。我需要它只在有限的时间内录制,而不需要用户点击。我该怎么做?
MediaRecorder recorder = new MediaRecorder();
File outputFile = new File(file);
recorder.setAudiosource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
try
recorder.prepare();
catch (IllegalStateException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
recorder.start();
recorder.setMaxDuration(60000);
// stop
recorder.stop();
recorder.reset();
recorder.release();
【问题讨论】:
【参考方案1】:这会做得很好:(在准备/启动功能之前使用setMaxDuration)
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.setMaxDuration(60000);
recorder.prepare();
recorder.start();
【讨论】:
谢谢,这行得通……但其他人都知道,理想情况下,您需要一些东西来通知用户录制已停止,因为他们不知道。但是,如果您查看生成的文件,它只是分配的有限秒数。所以谢谢。【参考方案2】:使用setMaxDuration
和setOnInfoListener
获取通知UI 的回调。
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(outputFile.getAbsolutePath());
recorder.setMaxDuration(60000);
recorder.prepare();
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener()
@Override
public void onInfo(MediaRecorder mr, int what, int extra)
if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED)
Toast.makeText(context, "Recording stops. Limit reached", Toast.LENGTH_LONG).show();
);
recorder.start();
【讨论】:
【参考方案3】:你应该把你的 recorder.stop() 等调用放在一个计时器中
这里是如何使用定时器任务的说明链接http://developer.android.com/resources/articles/timed-ui-updates.html
Timer timer = new Timer();
timer.schedule(new FinishRecordingTask(), 100, 200);
在你调用 recorder.start() 之后添加它
【讨论】:
【参考方案4】:这可能是一个有点讨厌的方法。但这就是我所做的,
使用 mediaplayer.start() 启动 mediaPlayer 后,像这样启动与它平行的线程,
thread passMusic=new Thread(new Runnable()
public void run()
try
Thread.sleep(60000);
mediaplayer.pause();
mediaplayer.stop();
mediaplayer.release();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
);passMusic.start();
现在您可以使用处理程序来更新您的 UI 或其他内容。
【讨论】:
实际上将其与 woliu 的答案结合使用是一种很好的方法。他的回答会限制录音,但你的回答是让用户知道它已经完成的一个很好的解决方案,例如,你可以在时间限制后出现敬酒。谢谢!虽然必须通过活动发布Toast
(而不是Thread
),但这是一个单独的问题,答案在堆栈上。
Thread.sleep 不准确!请阅读此***.com/questions/17561380/…以上是关于如何自动限制 Android 录音长度?的主要内容,如果未能解决你的问题,请参考以下文章