4

私は Android のテレフォニー機能のソース コードを調べていて、少し迷っています。基本的に、あなたが Google または OEM でない限り、CDMA/GSM デバイスを処理する方法はないということをまとめました。今、私は、OEM が電話を処理するコードをどこに置くか、つまり、どのクラス/インターフェイスから継承/実装するかを理解しようとしています。

電話アプリのアクティビティを調べながら、最終的に をInCallScreen呼び出す通話終了ボタンのクリック ハンドラーをたどりました。は抽象クラスであり、抽象メソッドであるため、OEM がテレフォニー サービスを提供するためにオーバーライドするクラスの 1 つではないかと考えていました。このクラスのオープンソースの実装を知っている人がいないかどうかを尋ねて、舞台裏で何が起こっているかについてもう少し洞察を得ることができます。PhoneUtils.hangup(CallManager)com.android.internal.telephony.Call.hangup()com.android.internal.telephony.Callcom.android.internal.telephony.Call.hangup()

4

1 に答える 1

7

あなたは正しいです。これは実際にcom.android.internal.telephony.CallOEM が実装するインターフェイスです。より具体的には、com.android.internal.telephony.Phone実装する必要があるのは、CallConnection、およびその他の多くのインターフェースを使用するインターフェースです。

2 番目の質問については、Google/ASOP (Android オープン ソース プロジェクト) が実際に GSM および CDMA 用のこれらすべてのクラスの実装を提供しています。そのため、インターフェイスの Android ソースにはGSMPhoneと実装があります。CDMAPhonePhone

https://android.googlesource.com/platform/frameworks/baseAndroid ソース コード全体を複製したくない場合は、git を複製できます。またはフォルダの下(frameworks/base)/telephony/java/com/android/internal/telephony/を見てください。ここでは、たとえば、あなたが尋ねているインターフェースの実装を見つけることができます。gsm/cdma/GSMCall.javacom.android.internal.telephony.Call

Android テレフォニー スタックは、おおよそ次のようになります。

+------------------------------------+
| Phone  |  Contacts |  (other apps) |
+------------------------------------+
|android internal telephony framework|
+------------------------------------+
|    Radio Interface Layer (RIL)     |
+------------------------------------+
|        GSM/CDMA modem              |
+------------------------------------+

GSM/CDMA モデムは通常、一部のベンダーから提供されており、使用する特定の GSM/CDMA モデムに合わせて RIL レイヤーをカスタマイズする必要があります。したがって実際には、ベンダーは、GSM/CDMA 電話とは異なるものをサポートしたい場合を除き、パッケージ内のCallConnectionPhoneなどのインターフェイスの既存の実装を変更する必要はありません。com.android.internal.telephony

于 2012-05-25T11:41:37.283 に答える