如何检查Android麦克风是否可用?

时间:2014-03-27 03:34:10

标签: android

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

3 个答案:

答案 0 :(得分:3)

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

"即使麦克风正在使用中,麦克风也会准备好#34;

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;
    }

答案 1 :(得分: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

答案 2 :(得分:0)

如果您使用AudioRecord,然后呼叫startRecording(),然后您应该检查记录器的状态:getRecordingState()。如果录制成功开始(这意味着麦克风可用),它将返回3(AudioRecord.RECORDSTATE_RECORDING),否则将返回1(AudioRecord.RECORDSTATE_STOPPED

以下是Kotlin中此功能的代码:

private fun isMicAvailable(audioRecord: AudioRecord): Boolean {
    audioRecord.startRecording()
    val isAvailable = audioRecord.recordingState == AudioRecord.RECORDSTATE_RECORDING
    audioRecord.stop()
    audioRecord.release()
    return isAvailable
}