1

我在我的应用程序中使用 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,但与其他应用程序的干扰是相同的。

我想我的问题是:我怎样才能避免这种干扰?

4

0 回答 0