5

通話中にSpeechRecognizerを実行する方法はありますか?私はそれをこのように行いました:

  • BroadcastReceiver電話の状態の変化を処理します(オフフックなど)。
  • これSpeechRecognizerは、メインスレッドでのみ開始できるため、現在の(メイン)スレッドで開始されます。アプリケーションコンテキストはレコグナイザーに使用されます(ブロードキャストレシーバーに与えられた現在のコンテキストは使用を開始できません)

しかし、残念ながら、反対側の人は私を聞くことができません(ただし、音声認識は正常に機能します)。離れて、認識機能は私の声を「消費」し、それを送信しません。

呼び出し中にメインスレッドで何かを行うのは危険だと知っていますが、呼び出し中に何らかの方法でレコグナイザーを実行する方法はありますか?

更新:のTelephonyManager代わりにリスナーを試していBroadcastReceiverますが、一部の内部サービスはNPEで動作します。

4

2 に答える 2

2

AFAIK音声通話は、Android側から処理されることはありません。アプリケーションプロセッサまたは通信プロセッサのいずれかが、両方ではなく、いつでもストリームを制御できます。通常、音声通話が開始されるとすぐに、マイクとヘッドセットのストリーム制御が通信プロセッサに与えられます。不思議なことに、あなたの場合、アプリケーションプロセッサが制御を取得しています。これはバグのようです。

オーディオストリームは、通信プロセッサによって直接処理されます(アプリケーションプロセッサで1回、最終的に呼び出しを処理する通信プロセッサで1回実行するのは処理の無駄なので、意味があります)。だから私はこれが可能だとは思わない。

于 2012-08-15T18:32:09.383 に答える
0

電話のモデルによっては、音声認識機能がサービスに実装されている場合があります。androidv4でHTCRezoundに問題はありませんが、オーディオマネージャーがクラッシュするため、androidv2.3でMotorolaBionicが機能しません。HTCを使用しても、認識機能は他の電話でその人の声を聞くことができませんでした。スピーカーをオンにすると、レポートエラーが一致しなくなります。

于 2012-11-03T07:21:07.963 に答える