我目前正在编写一个使用麦克风查询声级的应用程序。我正在使用AlarmManager每分钟查询一次声级。我面临的问题是,我发现如果我使用另一个也使用麦克风的应用程序(例如分贝级读取器),我的应用程序将崩溃,因为麦克风不可用。是否有办法检查麦克风当前是否正在使用?
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; }
dauxcl2d2#
如果您使用AudioRecord,则调用startRecording(),然后您应该检查记录器状态:getRecordingState()。如果录音成功开始(表示话筒可用),则返回3(AudioRecord.RECORDSTATE_RECORDING),否则返回1(AudioRecord.RECORDSTATE_STOPPED)下面是这个函数在Kotlin中的代码:
AudioRecord
startRecording()
getRecordingState()
AudioRecord.RECORDSTATE_RECORDING
AudioRecord.RECORDSTATE_STOPPED
private fun isMicAvailable(audioRecord: AudioRecord): Boolean { audioRecord.startRecording() val isAvailable = audioRecord.recordingState == AudioRecord.RECORDSTATE_RECORDING audioRecord.stop() audioRecord.release() return isAvailable }
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
3条答案
按热度按时间vshtjzan1#
尝试捕捉异常,因为你得到异常,当你尝试使用麦克风,你可以处理它.
“即使话筒正在使用,话筒实际上也准备良好”
或者这段代码片段可能会给予你一个想法
dauxcl2d2#
如果您使用
AudioRecord
,则调用startRecording()
,然后您应该检查记录器状态:getRecordingState()
。如果录音成功开始(表示话筒可用),则返回3(AudioRecord.RECORDSTATE_RECORDING
),否则返回1(AudioRecord.RECORDSTATE_STOPPED
)下面是这个函数在Kotlin中的代码:
igsr9ssn3#
我还想检测麦克风是否正在使用。我的解决方案是使用AudioManager获取当前模式。
其他模式用法,如MODE_IN_COMMUNICATION、MODE_IN_CALL,请查看https://developer.android.com/reference/android/media/AudioManager.html#MODE_NORMAL