私は、アクティブな通話中にアプリが音声のアップリンク周波数でDTMFトーンを送信できるようにする必要があるプロジェクトに取り組んでいます。
私の2つの条件は次のとおりです。
宿題をするのに数日を費やしましたが、通話中のDTMF送信が現在のSDK /標準APIでサポートされていないことを認識しています。ただし、com.Android.internal.telephony
の関連するクラスを使用することで、ネイティブのPhoneアプリがこれを行う方法を模倣したいと考えています。私は 標準のサードパーティアプリの内部APIの使用方法に関するこのサイト をフォローしました。
また、Android OS開発環境をセットアップし、エミュレーターでデバッグモードでPhoneアプリを実行して、内部の動作を把握することができます。
標準のエミュレーターでさまざまな方法を試しましたが、エラーは次のとおりでした。
Android.uid.phoneのsharedUserIdを使用して、Phone.apkのソースに基づいて名前が変更されたアプリをインストールしようとすると、次のようになります。
インストールエラー:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
私はそれに署名するためのシステム証明書を持っていないという事実のために間違いありません。
Phone.apkのソースからの関連するDTMFトーン送信コードに基づいてカスタムアプリを作成しようとすると、PhoneFactoryのセットアップ時に次のエラーが発生します。
Java.lang.SecurityException:パーミッション拒否:ブロードキャストAndroid.provider.Telephony.SPN_STRINGS_UPDATEDの送信は許可されていません。
AndroidManifest.xmlはPhone.apkと同じ権限でセットアップされていますが、私のアプリには適切な権限がないため、間違いありません。
私は他に何を試すことができるかについて途方に暮れています。誰か提案がありますか?
よろしくお願いします、サイモン。
あなたは興味深いアプローチをとっています、そして私はあなたの努力を称賛します。残念ながら、アプリ開発者としての使用が許可されていない予約済みの内部特権(明らかに、SPN_STRINGS_UPDATED
など)がいくつかあり、これは多かれ少なかれこのアプローチを破ります。これを引き起こしているコードの領域を削除してみることができますが、ブロッキングの問題が発生することは間違いありません。
したがって、現時点ではこれは不可能です。 Androidのオープン機能リクエスト 既存の電話でDTMFトーンを送信するためのものがありますが、ほぼ2年間休止しています。
これで問題が解決しないことは理解していますが、番号をダイヤルした直後にDTMFトーンを送信できることに注意してください。
Intent i = new Intent("Android.intent.action.CALL",
Uri.parse("tel://" + number + "," + dtmfTones));
簡単に言えば、少なくともモデムにアクセスするためにシステムユーザーとして実行する必要がある電話アプリをカスタマイズしないと、それを行うことはできません。これを行うには、電話をルート化する必要があります。
要件を満たすために考えられる唯一の解決策は、Androidプラットフォームを拡張することです。これを実行し、パッチをAOSPプロジェクトに送信しました。
https://Android-review.googlesource.com/3282
https://Android-review.googlesource.com/32821
現在、Googleの開発者が私たちの貢献を確認して受け入れるのを待っています。興味がある場合は、さまざまなAOSPリスト(Android-contrib、Android-platform)でGoogleに知らせてください。うまくいけば、レビューを促進するでしょう。
よろしく、Gergely
アクティブな通話中にDTMFトーンを送信することはできませんが、通話を開始するときに「プログラム」するときに送信できます。次の投稿を参照してください: https://stackoverflow.com/a/12986066/475472