web-dev-qa-db-ja.com

android)の音声通話で音声ファイルを再生できない理由

この質問は、次のような質問の繰り返しのように見える場合があります。
Androidで音声通話で音声ファイルを再生する方法
進行中の通話のバックグラウンドオーディオ-可能ですか?

これらの質問の回答は、Androidの音声通話で事前に録音されたオーディオを再生することはできないことを示唆しています。なぜそれが不可能なのか知りたいですか?制限(ハードウェア/ソフトウェア)は何ですか?それは本当に制限ですか、それとも意図的に行われますか? Androidのソースコードを変更して、それを可能にすることはできますか?

22
Falak

徹底的な調査の結果、私が知ったのは、それを可能にするための制限/ハードルが複数あるということです。これらの制限/ハードルは3つの異なるレベルにあります。

最初の制限はAPIレベルにあります。これは、 Androidの公式ドキュメント

2番目の制限は、無線インターフェイス層(RIL)にあります。 RILは、LinuxライブラリのRadio Daemon(rild)への呼び出しの完全な制御を渡し、さらにベンダーRILに制御を渡します。つまり、Androidソースコードで音声通話を操作することはできません。

これら2つの制限を取り除くことができたとしても、進行中の音声通話に対して音声ファイルを再生できない場合があります。 3番目の制限があるためです。すべてのベンダーには、Radio Daemon(rild)と通信する独自​​のRILライブラリがあります。これには、ベンダーRILが実際にはオープンソースではないオープンソースである必要があります。ハードウェアベンダーは通常、デバイスドライバーのコードを利用可能にしません。

このトピックに関する詳細な議論は、 このリンク にあります。

12
Falak

これは制限であり、セキュリティ上の理由から課され、OSレベルで制限されていると思います。

まず、セキュリティの脅威を分析しましょう。呼び出し先にカスタムオーディオファイルを再生できた場合、短所の全世界が開かれます:カスタマーサポートをだまし、他人のふりをし、与えることができます不正な購入確認など。このため、AndroidもiOSもこの機能を許可していません。

Androidでは、現在のAPIではそうすることができないという理由だけで、プログラム的な方法でこれを行うことはできません。指摘されているように、公式ドキュメントにも記載されています ここ 。ソースコードを掘り下げると、通話中にマイク出力にアクセスすることでこの機能を有効にできる可能性がありますが、そのためにはカスタムバージョンのAndroidを実行する必要があります。良い出発点はAudioTrackソース、 ここで入手可能 です。


[〜#〜] edit [〜#〜]:オーディオモッドの良い例は、Nexus 5イヤピースを2番目のスピーカーとして有効にすることです(ルートが必要です) )。見つけることができます ここ

16
Sebastiano

これは、Androidでのオーディオルーティングの優先順位のために関連するソフトウェアです。 CallManager を調べて、メソッドsetAudioMode()を掘り下げてください。オーディオモードがMODE_IN_COMMUNICATIONに設定された後、次のコードが呼び出されます

audioManager.requestAudioFocusForCall(AudioManager.STREAM_VOICE_CALL,
                        AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

この時点から、テレフォニーサービスの優先度が最も高くなり、他のオーディオを並行して再生することはできなくなります。

4
clash

注:オーディオデータは、標準出力デバイスにのみ再生できます。現在、それはモバイルデバイスのスピーカーまたはBluetoothヘッドセットです。通話中は会話音声で音声ファイルを再生することはできません。

公式リンクを参照してください http://developer.Android.com/guide/topics/media/mediaplayer.html

0
Akash

AudioManager.OnAudioFocusChangeListenerを実装することにより、audiomanagerの状態を取得できます。したがって、これにより、音楽がバックグラウンドで再生されている場合、AudioManagerの状態(再生と一時停止は完全に開発者の手に委ねられています)を同様に取得できます......

Androidデバイスでこれを処理するネイティブミュージックプレーヤーの一部は、通話がTelephonyManager.EXTRA_STATE_OFFHOOKにあるときに音楽を制限します。したがって、このシナリオも完全に開発者の手に委ねられています(処理するかどうかに関係なく)彼が処理していない場合、両方が並行して再生されますy

0
KomalG