Hi,
MediaRecorder can record audio(or video) to disk. and it's method
"setMaxDuration" can limit the recording duration. when the time
reached, the OnInfoListener will callback the "onInfo" method.
but in my practice, the "OnInfo" never be called. can any body give me
some tips? below is the code.
package com.iflytek.testac;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import android.media.MediaRecorder;
import android.media.MediaRecorder.OnInfoListener;
public class Recorder implements OnInfoListener
{
private MediaRecorder _recorder = null;
private Listener _Listener = null;
private Timer _Timer = null;
public void Start(int maxTime)
{
_recorder = new MediaRecorder();
_recorder.setOnInfoListener(this);
_recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
_recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
_recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
_recorder.setOutputFile("/sdcard/somusic.temp.amr");
_recorder.setMaxDuration(maxTime);
try
{
new File("/sdcard/somusic.temp.amr").createNewFile();
_recorder.prepare();
}
catch (IllegalStateException e)
{
e.printStackTrace();
if (_Listener != null)
{
_Listener.OnError();
}
}
catch (IOException e)
{
e.printStackTrace();
if (_Listener != null)
{
_Listener.OnError();
}
}
_recorder.start();
_Timer = new Timer();
_Timer.scheduleAtFixedRate(new FetchTask(), 1000, 1000);
}
public void onInfo(MediaRecorder mr, int what, int extra)
{
if (what ==
MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED)
{
if (_Listener != null)
{
_Listener.OnFinish();
}
_recorder.stop();
_recorder.reset();
_recorder.release();
_Timer.cancel();
}
}
public void OnTimer()
{
if (_Listener != null)
{
byte[] buffer = new byte[3];
_Listener.OnData(buffer);
}
}
public void SetListener(Listener listener)
{
_Listener = listener;
}
private class FetchTask extends TimerTask
{
public void run()
{
OnTimer();
}
}
public interface Listener
{
void OnError();
void OnData(byte[] buffer);
void OnFinish();
}
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---