Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测android中是否存在麦克风?_Android - Fatal编程技术网

如何检测android中是否存在麦克风?

如何检测android中是否存在麦克风?,android,Android,我的应用程序中有一个语音识别部件,用于捕获用户的语音输入 我就是这么做的 Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); startActivityForResult(voiceIntent, REQUEST_CODE); 这在大多数设备上都能正常工作,但现在由于平板电脑越来越流行,而且其中一些设备没有麦克风,因此出现了一个错误 W/dalvikvm(408):线程ID=1:线程 以未捕获的异

我的应用程序中有一个语音识别部件,用于捕获用户的语音输入

我就是这么做的

Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
startActivityForResult(voiceIntent, REQUEST_CODE);
这在大多数设备上都能正常工作,但现在由于平板电脑越来越流行,而且其中一些设备没有麦克风,因此出现了一个错误

W/dalvikvm(408):线程ID=1:线程 以未捕获的异常退出 (组=0x40015560)E/AndroidRuntime( 408):致命异常:主 E/AndroidRuntime(408): android.content.ActivityNotFoundException: 未找到可处理意图的活动{ act=android.speech.action.recognizer\u speech (有附加项)}E/AndroidRuntime( 408):在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)

因此,我想先检测麦克风是否存在,然后再让用户访问语音输入功能。如何检测设备上是否存在麦克风

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

谢谢。

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

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

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

Android API参考:

为什么不简单地捕获异常?我在我的一个应用程序中这样做,当我试图打开条形码扫描仪时。这很好。捕获异常可以解决在捕获正确的异常时防止应用程序崩溃的问题。但是,如果可以用正确的方法解决异常,为什么还要捕获它呢?这也意味着我必须只捕捉那些因为麦克风不存在或演讲意图不存在而导致的异常。如果它因为其他原因崩溃了,而异常也在捕获这些呢?通过进行正确的检查,我将能够在必要时采取其他行动。话虽如此,如果您所做的工作非常适合您,您可能不需要更改:).1)“pm.QueryInputActivities(new Intent(RecogenerIntent.ACTION_Recogener_SPEECH),0);”这取决于设备上安装了哪些应用程序,所以它不能告诉我们是否有麦克风,它只能暗示。2) 当麦克风与设备物理断开连接时,“getPackageManager().hasSystemFeature”(“android.hardware.Mirror”)”返回“true”。遗憾的是,我还没有找到有效的解决办法。
PackageManager pm = getPackageManager();
boolean micPresent = pm.hasSystemFeature(PackageManager.FEATURE_MICROPHONE);