3

VoIP アプリケーションを開発しています。

Galaxy Tab 4.0.4 で Bluetooth ヘッドセットを使用すると、次の問題が発生します。

VOIP 通話の途中で音声通話が発生した場合、またはアプリケーションを停止してアプリケーションを再起動した場合、Bluetooth ヘッドセット マイクが再び使用されなくなります。

問題が発生すると、Bluetooth アダプタまたは Bluetooth デバイスを停止してから起動しても、Bluetooth ヘッドセット マイクが使用されなくなります。adb 再起動のみが問題を解決するようです。

私が完全に理解していない「汚い」修正があります:

アプリケーションから呼び出して問題が発生した場合:

audioManager.setMode(AudioManager.VOICE_CALL)

audioManager.setMode(AudioManager.NORMAL)

Bluetooth ヘッドセットのマイクを再度有効にします。

この呼び出しが常に機能している場合は、問題を解決するのに十分ですが、問題があります: 時々 (約 25%) スニペットを呼び出した直後に、SCO が有効になるたびに Bluetooth ヘッドセットで非常に迷惑な干渉を聞き始めます。

AudioManager ドキュメントの次のコメントに関連していると思います:「特に、MODE_IN_CALL モードは、ラジオ レイヤーからの信号がプラットフォーム ミキサーに供給されるため、電話をかけるときにテレフォニー アプリケーションでのみ使用する必要があります。 '

問題は、説明された問題の原因と回避方法についてのアイデアはありますか??

4

1 に答える 1

0

私は似たようなことに出くわしました。着信音がアプリのオーディオ フォーカスを盗んだ後、オーディオ品質が低下しました。

API レベル 11 にアクセスできる場合audioManager.setMode(MODE_IN_COMMUNICATION)は、VoIP 通話用であるため、 をお勧めします。それだけでオーディオ品質が向上するはずです。を使用すると、これまでMODE_NORMALにない反響フィードバックが聞こえる場合がありますMODE_IN_COMMUNICATION

それでも不十分な場合は、アプリがオーディオ フォーカスを取り戻したときにオーディオを再確立してみてください。これを行ったとき、アクティビティのライフサイクルが影響しないようにサービス内の音声を制御しましたが、着信音や音声通話などが影響するため、音声のフォーカスには注意を払う必要があります。アプリをバックグラウンドにすると音声が損なわれるとおっしゃっていたので、音声管理をサービスに移動するか、Bluetooth 接続を再確立することをお勧めしonResume()ます。または、onResume()何かを上書きしている可能性があります。コードサンプルがないとわかりにくいです。

オーディオ フォーカス リスナー (API レベル 8) がない場合は、次のように設定できます。

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
            am.setMode(MODE_IN_COMMUNICATION);
            //reestablish your bluetooth here, like you did originally
        } 
    }
};

リスナーは、VoIP 呼び出しの開始時または onCreate() 中にどこかに設定する必要があります。

final AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
am.requestAudioFocus(afChangeListener, AudioManager.STREAM_VOICE_CALL,
                                 AudioManager.AUDIOFOCUS_GAIN);

呼び出しが完了したら、このリスナーを登録解除することを忘れないでください。

am.abandonAudioFocus(afChangeListener);
于 2015-05-06T23:24:38.487 に答える