我在我的应用程序中使用 MediaRecorder 来测量分贝。为此,每 10 秒创建一次新的 MediaRecorder-Object,它运行一秒,在此期间调用 getMaxAmplitude() 10 次并计算平均值。在此之后,MediaRecorder 对象被停止并删除。
启动 Recorder 的方法如下所示
public boolean start()
{
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
try
{
mRecorder.prepare();
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
mRecorder.start();
mRecorder.getMaxAmplitude();
return true;
}
停止的方法看起来像这样
public void stop()
{
//Log.d("SPLService", "stop()");
mRecorder.stop();
mRecorder.reset();
mRecorder.release();
mRecorder=null;
}
这几乎就是 Android 网站上的教程所指示的方式。
当我将此应用程序与其他使用媒体的应用程序(例如 Android 上的 Mediaplayer)并行使用时,就会出现问题。每当使用我的应用程序进行声音测量时,其他媒体应用程序都会停止甚至崩溃,即使它们的对象应该独立于我的。
我曾尝试使用 AudioRecord 而不是 MediaRecorder,但与其他应用程序的干扰是相同的。
我想我的问题是:我怎样才能避免这种干扰?