2011-01-05 7 views
8

사용자 음성 입력을 캡처하는 응용 프로그램에 음성 인식 부분이 있습니다. 마이크가 안드로이드에 있는지 감지하는 방법은 무엇입니까?

내가 할 것입니다

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

이것은 대부분의 장치에서 잘 작동하지만 지금은 태블릿이 인기를 얻고있다 그들 중 일부가 마이크를 가지고 있지 않기 때문에,이 오류가 발생합니다

W/dalvikvm (408) : 1 = threadid : 스레드 를 캐치되지 않는 예외 군 (= 0x40015560) E/AndroidRuntime ( 408)로 출사 : FATAL EXCEPTION : 메인 E/AndroidRuntime (408) android.c을 ontent.ActivityNotFoundException : android.app.Instrumentation.checkStartActivityResult (Instrumentation.java에서 : 없음 활동 의도 { 행위 = android.speech.action.RECOGNIZE_SPEECH (가 엑스트라)} E/AndroidRuntime ( 408)을 처리하기 위해 찾을 수 없습니다 : 1408) .....

그래서 나는 사용자 액세스에게 음성 입력 기능을하도록하기 전에 마이크가있는 경우 감지합니다. 장치에 마이크가 있는지 어떻게 알 수 있습니까?

감사합니다.

+0

당신이 해결책을 찾았나요? – blackfyre

+0

단순히 예외를 잡는 게 어떨까요? 바코드 스캐너를 열려고 할 때 응용 프로그램 중 하나에서이 작업을 수행하고 있습니다. 그건 잘 작동합니다. –

+0

예외를 잡으면 올바른 예외를 잡으면 앱이 충돌하지 못하게하는 문제가 해결됩니다. 그러나 왜 당신이 그것을 올바르게 해결할 수있을 때 예외를 잡을 수 있습니까? 또한 마이크가 없거나 음성 의도가 없기 때문에 원인이되는 예외 만 잡아야한다는 것을 의미합니다. 다른 이유로 인해 추락 한 경우에도 예외가 발생하면 어떻게됩니까? 올바른 수표를 작성함으로써 필자는 필요할 때 대체 조치를 취할 수 있습니다. 당신이하고있는 일이 당신에게 완벽하게 작동한다면, 당신은 그것을 바꿀 필요가 없을 것이라고 말한 것입니다. – achie

답변

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

안드로이드 API 참조 : hasSystemFeature

관련 문제