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

bf1o4zei  于 2023-02-20  发布在  Android
关注(0)|答案(3)|浏览(408)

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

vshtjzan

vshtjzan1#

尝试捕捉异常,因为你得到异常,当你尝试使用麦克风,你可以处理它.
“即使话筒正在使用,话筒实际上也准备良好”
或者这段代码片段可能会给予你一个想法

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

dauxcl2d2#

如果您使用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
}
igsr9ssn

igsr9ssn3#

我还想检测麦克风是否正在使用。我的解决方案是使用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

相关问题