電話の録音はAndroidでは実際にはサポートされていませんが、一部のデバイスではある程度サポートされています。
これにより、さまざまな通話録音アプリが、デバイスに関する可能な限り多くの情報を収集し、デバイスに対して何をすべきかを判断し、これをどうするかを決定しました。
ルートソリューションを提供するものもあります。
そのような例の1つは boldbeast Call Recorder app です。これは、変更する多くのさまざまな構成を提供します。
「記録モード」。非ルート化デバイスの場合は14モード、ルート化デバイスの場合は最大34モードを表示します。また、ルート化されたデバイスのオプションとして「Alsaモード」を表示します。
「オーディオ効果の調整(「パラメーターのグループを自動調整」)します。
「Tune Audio Route」があり、可能な値は「Disabled」、「Group1」、「Group2」、「Group3」です。
ルート化されたデバイスの場合:
「オーディオコントロールの変更」(「オーディオコントロールの自動変更」)
「オーディオドライバーの変更」(録音モード21,22,23,24,31,32,33,34を有効にするためにオーディオドライブの設定を変更します)
ルート化されたデバイスの場合:「入力ストリームの開始」
通話録音アプリを作成する必要がある場合、さまざまなデバイスのさまざまな回避策を見つける以外に方法はありませんが、他のアプリはAPIに表示されない用語を使用しているようです。
たとえば、私が言及したアプリのどれも見つかりません。
Androidで通話を録音する方法についての質問が山ほどあり、すべてのデバイスで機能しないことを示していますが、興味深いことがいくつか見つかりました。これまでの私の試みと洞察は次のとおりです。
録音の準備中に使用できるオーディオ録音ソースがいくつかあります(ドキュメント here )が、悲しいことに各デバイスでは異なる。 VOICE_CALLが機能する場合もあれば、その他の場合もあります。しかし、少なくとも試してみることができます...
OnePlus 2でAndroid 6.0.1を使用する場合、着信コールは VOICE_CALL を使用して記録できますが、スピーカーをオンにしてMICをオーディオソースとして使用しない限り、そこに発信通話を録音できません。どういうわけか、私が言及したアプリは問題なくそれを記録することに成功しています。過去にこのトピック全体に対処しようとしたため、他のAndroidデバイスで他の問題が発生することは間違いないでしょう。更新:見つかった このサンプル プロジェクト(また こちら )、何らかの理由で、mediaRecorderのprepare
呼び出しとstart
呼び出しの間のUIスレッドで2秒間スリープします。それはうまく機能し、同様のことをしたとき(Handler.postDelayedを1秒間使用するのを待つ)、それもうまく機能しました。そこに書かれたコメントは、「準備に時間がかかることがあります」です。
Galaxy S7でAndroid 8を使用すると、発信した通話と着信した通話の反対側の音声を取得できませんでした(MICとスピーカーでも)。言及されたがうまく働いた。
コール録音のPOCを試すために、オープンソースgithubリポジトリを公開しました here 単一の通話を録音し、すべてが正常に機能する場合、最新の通話を聞くことができます。
この「ViktorDegtyarev-CallRecLib」SDK 、これはまったく機能していないようで、さまざまなAndroidバージョン
これらの2つの古いサンプルプロジェクト: rvoix 、 esnyder-callrecorder 、両方とも実際の記録に失敗します。 2番目はAndroid 6.0.1デバイスでは動作しないようです。これはサポートされるはずです。
aykuttasil-CallRecorder サンプルおよび axet-Android-call-recorder サンプル-両方とも、私のPOCと同じように、AudioSource以外の調整はありません。そのため、OnePlus 2出力などのいくつかのケースで記録に失敗します-発信通話の音声。
ほとんどのサードパーティアプリはAudioSourceの調整のみを提供しますが、一部のアプリ( "boldbeast"など)はさらに多くを提供します。 1つの例は、「 Automatic Call Recorder 」で、「構成」(10個の値から選択、最初は「デフォルト」) )および "method"(選択可能な5つの値、最初は "default")。これらのアプリはおそらく、他の人にこれらの構成の意味を理解してほしくないので、一般的な名前を付けています。または、誰にとっても(特にユーザーにとって)複雑すぎるため、名前を一般化します。
「setMode」のAPIがあります here ですが、呼び出しても変わらないようです。この方法で、通話が使用されている場所の「チャネル」を変更することを考えていましたが、機能しません。呼び出し中は「2」の値のままになります。これは MODE_IN_CALL です。
さまざまなデバイス(各OEMおよび独自のパラメーター)で使用可能なカスタマイズされたパラメーターがあり、これらを設定できます here および多分JNI経由でも( here および here )、しかし、私はこの情報をどこから入手できるのかを得られません(つまり、どのキーと値のペアが利用可能かを意味します)。私は多くの場所を検索しましたが、利用可能なパラメータと利用可能なデバイスについて説明しているWebサイトが見つかりませんでした。
AudioRecord の代わりに MediaRecorder 録音のクラスです。少し低レベルだと思うので、より多くのパワーとカスタマイズされた機能へのアクセスを提供できますが、MediaRecorderと非常によく似ており、同じオーディオを使用しているようですソース(例 here )。
低レベルAPIで行ったもう1つの試みは、JNI(Android用OpenSL ES)を使用することでした。このため、あまり情報を見つけることができませんでした( here および here )、Googleの2つのサンプルのみが見つかりました here =(「オーディオエコー」および「ネイティブオーディオ」と呼ばれます)。これらは、音声の録音に関するものではありません。少なくとも、それらが発生することはありません。
Android Pには、通話を録音する公式の方法があるかもしれません( here および here )。 Android P DP3デバイス(Pixel 2)でテストすると、「DEFAULT」をオーディオソースとして使用して、着信および発信の両方の通話で両側を正常に記録できたため、APIが最終的に公式になり、すべてのAndroidバージョン。私はそれについて書いた here と here 。
私は多分 Visualizer クラスがレコーディングの回避策になると考えていましたが、StackOverflowの投稿によると( here )、品質が非常に低いため、試してはいけないと判断しました。加えて、そこから録音する方法のサンプルが見つかりませんでした。
一部のデバイスで利用できる可能性のあるパラメーターをいくつか見つけました here ( here )、すべて「AUDIO_PARAMETER_」で始まりますが、Galaxy S7でテストすると、すべて空の文字列が返されました。また、 このウェブサイト を見つけました。これは、MICと一緒にaudioManager.setParameters("noise_suppression=off")
を使用するというアイデアを与えてくれました。音源ですが、これはGalaxy S7の場合には何もしないようです。
このトピックに関する他の同様の質問とは対照的に、私は通話を録音する方法を尋ねていません。私はすでにそれが非常に問題が多く複雑な問題であることを知っています。さまざまな構成に対処する必要があることは既に知っています。おそらく、サーバーを使用してすべての構成を保存し、各構成に最適なものを見つけるでしょう。
私が尋ねたいのは、調整と回避策についての詳細です:
さまざまなデバイスの構成のリスト、Androidバージョン、およびそれぞれの選択項目はありますか?
オーディオソースのほかに、使用できる他の構成はどれですか?
さまざまなデバイスおよびAndroidバージョンで可能なパラメーターはどれですか? OEMについて説明しているWebサイトはありますか?
私が言及したアプリのさまざまな用語は何ですか?それらの変更方法に関する情報はどこで入手できますか?
ルート化されたデバイスで使用できるツールはどれですか?
APIを使用して、通話録音をサポートしているデバイスとサポートしていないデバイスを知ることは可能ですか?
OnePlus 2の回避策について、録音を開始するまで少し待つために、なぜ必要なのですか?すべてのAndroidバージョンで必要ですか?既知の問題ですか? 1秒で十分ですか?
マイクとスピーカーを使用している場合でも、Galaxy S7で反対側の録音に失敗したのはなぜですか?
私はあなたのすべての問題/質問/問題に直面したので、Voicecall Recordingアプリで何週間も費やしました。さらに、私のプロジェクトは優先度が低かったため、毎日多くの時間を費やしていなかったため、Androidメジャーリリース)。
私は常に同じGalaxy Note 5でその在庫ROM(ルートなし)を使用して開発していましたが、同じデバイスで動作が1つから変化していることを発見しましたAndroid =説明なしで別のリリース。たとえば、Nougat 7.0から7.1.2までは、以前と同じコードを使用して音声通話を録音できませんでした。
Googleでは、音声通話の録音に関する制限を何度も施行しています。最初はVOICE_CALL AudioSourceを使用するだけで十分でした。その後、製造業者はこの値を必要に応じて解釈し始めました。その結果、1つの実装は正常に機能し、別の実装は機能しませんでした。次に、ドキュメント化されていない/隠されたメソッドを実行して音声通話録音を開始するためにReflectionが必要でした。次に、Googleがランタイムチェックを追加したため、Reflectionを使用しても直接呼び出すことはできませんでした。ただし、この方法はすべてのデバイスで同じ名前が使用されていることを保証するものではないため、安定性に欠けています。
その後、新しいAndroid=バージョンで動作している現在動作中のアプリをリバースエンジニアリングし始めました。これらのアプリは完全に異なる、より安全なアプローチを使用していることがわかりました。 JNIライブラリを使用して、アセンブラーコード間でこのメソッドを非表示にしようとしています。これらのアプリ設定で確認できます(私は98%確信しています)が単に「偽物」であるか、使用されなくなったOLDメソッドを指します。
ルート化されたデバイスには、少し異なる方法を実行する必要があります。これらのデバイスはAudioRouteを変更する可能性があるため、この場合は別のアプローチを使用できます。
[1]サポートされているすべてのデバイスをリストしたリストやウェブサイト、または音声通話記録を成功させるための最良の方法はありません
[6] APIコールを使用するだけで、どのデバイスがVoicecall Recordingをサポートするかを知ることはできません。 Excepionsをキャッチする必要があります...
[8] MIC +スピーカーによる録音には多くの問題があります。(1)発信者は周囲の音をすべて聞くため、プライバシーバグが大きな問題です(2)エコーが大きな問題です(3)録音ボリュームが非常に大きい録音された音声の品質が低い