¿Cómo detectar si hay un micrófono presente en android?

Tengo una parte de reconocimiento de voz en mi aplicación para capturar la entrada de voz de los usuarios.

Esto es lo que hago

Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); startActivityForResult(voiceIntent, REQUEST_CODE); 

Esto funciona bien en la mayoría de los dispositivos, pero ahora ya que las tabletas se están popularizando y algunas de ellas no tienen micrófono, lanza un error

W / dalvikvm (408): threadid = 1: hilo que sale con la excepción no captada (group = 0x40015560) E / AndroidRuntime (408): FATAL EXCEPTION: principal E / AndroidRuntime (408): android.content.ActivityNotFoundException: No Activity found to handle Intención {act = android.speech.action.RECOGNIZE_SPEECH (tiene extras)} E / AndroidRuntime (408): en android.app.Instrumentation.checkStartActivityResult (Instrumentation.java:1408) …..

Así que quiero detectar si el micrófono está presente antes de permitir que el usuario acceda a la función de entrada de voz. ¿Cómo puedo detectar si hay un micrófono presente en el dispositivo.

Gracias.

 PackageManager pm = getPackageManager(); boolean micPresent = pm.hasSystemFeature(PackageManager.FEATURE_MICROPHONE); 

Referencia de la API de Android: hasSystemFeature

He añadido otra respuesta, pero eso es sólo un enlace que se rompió después de algún tiempo, pero aquí es la respuesta correcta que incluye el código.

Este es el código que necesitará utilizar para iniciar la intención del reconocedor de voz. Esto comprueba si hay intenciones disponibles para manejar la intención de reconocimiento de voz.

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

En la parte superior de la que también puede hacer otra comprobación para ver si el micrófono en sí está presente en el dispositivo.

 if (getPackageManager().hasSystemFeature( "android.hardware.microphone")) { //Microphone is present on the device } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.