如何检测话筒是否存在于android?

我的应用程序中有一个语音识别部分来捕捉用户的语音input。

这就是我所做的

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

这在大多数设备上工作正常,但现在,由于平板电脑越来越受欢迎,其中一些没有麦克风,它会引发错误

W / dalvikvm(408):threadid = 1:线程退出与未捕获的exception(组= 0x40015560)E / AndroidRuntime(408):致命例外:主E / AndroidRuntime(408):android.content.ActivityNotFoundException:找不到活动Intent {act = android.speech.action.RECOGNIZE_SPEECH(extra extras)} E / AndroidRuntime(408):at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)…..

所以我想在我让用户访问语音inputfunction之前检测麦克风是否存在。 如何检测设备上是否有麦克风。

谢谢。

Related of "如何检测话筒是否存在于android?"

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

Android API参考: hasSystemFeature

我添加了另一个答案,但这只是一段时间后被打破的链接,但这是包含代码的正确答案。

这是您需要用来启动语音识别器意图的代码。 这检查是否有任何意图可用于处理语音识别意图。

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

最重要的是,您还可以再次检查麦克风本身是否存在于设备上。

 if (getPackageManager().hasSystemFeature( "android.hardware.microphone")) { //Microphone is present on the device }