2014-03-27 102 views
1

我目前正在编程一个使用麦克风查询声级的应用程序。我正在使用AlarmManager来每分钟查询声音级别。我面临的问题是我发现如果我正在使用另一个使用麦克风的应用程序(例如分贝级读取器),我的应用程序将因为麦克风不可用而崩溃。有没有办法检查麦克风是否正在使用?如何检查android麦克风是否可用?

回答

2

尝试捕捉异常,因为当您尝试使用麦克风时可能会遇到异常,您可以处理它。

是否正在使用麦克风“的麦克风实际上将准备精美即使麦克风正在使用中”

OR 此代码段可能会给你一个想法

//returns whether the microphone is available 
    public static boolean getMicrophoneAvailable(Context context) { 
     MediaRecorder recorder = new MediaRecorder(); 
      recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     recorder.setOutputFile(new File(context.getCacheDir(), "MediaUtil#micAvailTestFile").getAbsolutePath()); 
     boolean available = true; 
     try { 
      recorder.prepare(); 
      recorder.start(); 

     } 
     catch (Exception exception) { 
      available = false; 
     } 
     recorder.release(); 
     return available; 
    } 
+0

感谢您的想法。即使麦克风正在使用,麦克风实际上也会做好准备。所以我所做的就是捕获start所抛出的异常。如果您将此添加到您的答案,我会接受它。 – rabz100

+0

我编辑了我的答案,谢谢。 –

0

我也想检测或不。我的解决方案是使用AudioManager获取当前模式。

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
if (am.getMode() == AudioManager.MODE_NORMAL){ 
    //microphone is available. 
} 

其它方式使用像MODE_IN_COMMUNICATION,MODE_IN_CALL,请 https://developer.android.com/reference/android/media/AudioManager.html#MODE_NORMAL

+0

您的解决方案不正确。即使麦克风被某些应用程序(如录音机)捕获,模式仍可能处于MODE_NORMAL模式。 –