2011-01-05 4 views
8

私はユーザーの音声入力をキャプチャするために私のアプリケーションに音声認識の部分を持っています。 アンドロイドにマイクが存在するかどうかを検出するにはどうすればよいですか?

この

は私が何をすべきかです

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

これは、デバイスのほとんどで正常に動作しますが、今錠剤が人気を集めている、そのうちのいくつかは、マイクを持っていないので、それはエラーをスロー

W/dalvikvm(408):= 1スレッドID:致命的な例外:メイン E/AndroidRuntime(408): android.cスレッドがキャッチされない例外 (グループ= 0x40015560)E/AndroidRuntime( 408)で終了しますontent.ActivityNotFoundException: android.app.Instrumentation.checkStartActivityResult(Instrumentation.javaで: 全く活性は、インテント{ 行為= android.speech.action.RECOGNIZE_SPEECH (持つエクストラ)} E/AndroidRuntime( 408)を処理することが見出されていません。 1408) .....

だから、私は、ユーザーが音声入力機能にアクセスできるようにする前にマイクが存在しているかどうかを検出します。デバイスにマイクが存在するかどうかをどのように検出できますか?

ありがとうございます。

+0

あなたが解決策を見つけますか? – blackfyre

+0

なぜ単に例外をキャッチしていませんか?バーコードスキャナーを開こうとすると、自分のアプリケーションの1つでこれをやっています。それはうまく動作します。 –

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

さらに、マイク自体がデバイスに存在するかどうかを確認するもう1つのチェックも行います。

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

関連する問題