I have a voice recognition part in my application to capture users voice input.
This is what I do
Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
startActivityForResult(voiceIntent, REQUEST_CODE);
This works fine on most of the devices but now since the tablets are getting popular and some of them do not have a mic, it throws an error
W/dalvikvm( 408): threadid=1: thread exiting with uncaught exception (group=0x40015560) E/AndroidRuntime( 408): FATAL EXCEPTION: main E/AndroidRuntime( 408): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.action.RECOGNIZE_SPEECH (has extras) } E/AndroidRuntime( 408): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408) .....
So I want to detect if the microphone is present before I let the user access the voice input feature. How can I detect if a microphone is present on the device.
Thank you.
Open Settings. Scroll down and tap Privacy. Tap either Microphone or Camera. Look through the apps listed and toggle the switch for any apps you don't need the camera or mic to the off position.
The microphone on Androids is typically at the bottom of your phone. Look at where you plug your phone in, and you'll see some vents or holes. Speak into the mic directly to be heard by others or to speak to your phone.
Settings > Apps & Notifications > Scroll down and click Advanced > Permission Manager > Select which settings you'd like to examine, from call logs, to camera permissions, to microphone permissions > Once you're under a category, you can click on any of the apps to toggle the permission to Allow or Deny.
PackageManager pm = getPackageManager();
boolean micPresent = pm.hasSystemFeature(PackageManager.FEATURE_MICROPHONE);
Android API Reference: hasSystemFeature
I added another answer but that is just a link that was broken after some time but here is the correct answer which includes the code.
This is the code that you would need to use to start the voice recognizer intent. This checks if there are any intents available to handle the speech recognition intent.
PackageManager pm = getPackageManager();
List<?> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() > 0) {
Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
voiceIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
startActivityForResult(voiceIntent, REQUEST_CODE);
Toast toast = Toast.makeText(this, "Loading Voice recognizer...", Toast.LENGTH_SHORT);
toast.show();
} else {
Toast.makeText(this,
"This action is not available on this device.",
Toast.LENGTH_SHORT).show();
}
On the top of that you ay also do another check to see if the microphone itself is present on the device.
if (getPackageManager().hasSystemFeature( "android.hardware.microphone")) {
//Microphone is present on the device
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With