2011-01-05 50 views
8

我的应用程序中有一个语音识别部分来捕捉用户的语音输入。如何检测话筒是否存在于android中?

这是我做的

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.c ontent.ActivityNotFoundException: 无活动处理意图{ ACT = android.speech.action.RECOGNIZE_SPEECH (具有额外)} E/AndroidRuntime( 408):在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java: 1408) .....

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

谢谢。

+0

你找到解决办法吗? – blackfyre 2012-08-30 07:37:49

+0

为什么不简单地捕捉异常?当我尝试打开条形码扫描仪时,我在我的一个应用程序中执行此操作。这工作正常。 – 2013-01-21 17:43:30

+0

捕捉异常解决了防止应用程序崩溃的问题,如果我们捕捉到正确的异常。但是,如果你能以正确的方式解决这个问题,为什么要抓住例外呢这也意味着我只能捕捉那些由于麦克风不存在或者语音意图不存在而导致的异常。如果因为其他原因而崩溃又会如何呢?例外情况也会如此呢?通过做出正确的检查,我可以在必要时采取替代措施。话虽如此,如果你所做的工作对你来说很完美,你可能不需要改变它:)。 – achie 2013-01-21 18:20:47

回答

2

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

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

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 
} 
8
PackageManager pm = getPackageManager(); 
boolean micPresent = pm.hasSystemFeature(PackageManager.FEATURE_MICROPHONE); 

Android的API参考:hasSystemFeature

相关问题