摘要:   1 frameworks/base/telephony/java/android/telephony/cdma为使用CDMA具体的电话功能提供的API。  1.1) CdmaCellLocation是CellLocation的直接派生类,表示了一个CDMA手机通话的位置。  CDMA(Code Division ...   1 frameworks/base/telephony/java/android/telephony/cdma为使用CDMA具体的电话功能提供的API。
  1.1) CdmaCellLocation是CellLocation的直接派生类,表示了一个CDMA手机通话的位置。
  CDMA(Code Division Multiple Access)又称码分多址,是在无线通讯上使用的技术,CDMA 允许所有的使用者同时使用全部频带(1.2288Mhz),并且把其他使用者发出的讯号视为杂讯,完全不必考虑到讯号碰撞 (collision) 的问题。 CDMA的优点包括: CDMA中所提供的语音编码技术,其通话品质比目前的GSM好,而且可以把用户对话时周围环境的噪音降低,使通话更为清晰。
  2 frameworks/base/telephony/java/android/telephony/gsm为使用GSM具体的电话功能提供的API,例如文字、数字、PDU短信。
  2.1) GsmCellLocation是CellLocation的直接派生类,表示了一个GSM手机通话的位置。
  GSM全名为:Global System for Mobile Communications,中文为全球移动通讯系统,俗称"全球通",是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。目前,中国移动、中国联通各拥有一个GSM网,为世界最大的移动通信网络。包括 GSM 900:900MHz、GSM1800:1800MHz 及 GSM1900:1900MHz等几个频段。
  2.2) SmsManager管理短信操作,如发送数据,文本和PDU的短信。通过调用静态方法SmsManager.getDefault()获得这个对象。被同时支持GSM和CDMA的android.telephony.SmsManager取代。
  2.3) SmsMessage一个短消息服务信息。被同时支持GSM和CDMA的android.telephony.SmsMessage取代。
  3 frameworks/base/telephony/java/android/telephony为手机基本信息提供的API(应用程序编程接口),包括网络类型、连接状态、电话号码字符串处理的实用程序。
  3.1) CellLocation代表设备位置的抽象类。有两个派生类:CdmaCellLocation和GsmCellLocation。
  3.2) JapanesePhoneNumberFormatter处理日本电话号码复杂的格式。
  3.3) NeighboringCellInfo实现Parcelable接口,代码邻近的电话信息,包括信号接受强度和电话ID位置。
  3.4) PhoneNumberFormattingTextWatcher实现TextWatcher接口,检测一个文本输入框,如果输入了电话号码,则将它通过PhoneNumberUtils的formatNumber函数格式化。该格式化是基于当前系统,将来对象被创建和语言环境变换并没有影响到这个实例。
  3.5) PhoneNumberUtils处理电话号码字符串的各种实用程序。
  3.6) PhoneStateListener是监测设备上特定电话状态变化的监听类,包括服务的状态,信号强度,消息等待指示(语音信箱)等。对状态进行方法重写,以至于接受更新。并且通过你的 PhoneStateListener对象, 与带LISTEN_标志的变量按位或。一些电话信息访问是受权限保护的。除非你的应用程序在manifest文件中声明有适当的权限,否则将不会收到保护的信息更新。凡申请许可,都会有适当的LISTEN_标志。
  3.7) ServiceState实现Parcelable接口,包含电话状态和服务相关的信息。下面的电话信息包含在返回ServiceState:
  ? 服务状态:IN_SERVICE,OUT_OF_SERVICE,EMERGENCY_ONLY,POWER_OFF
  ? 漫游指标
  ? 操作名称,短名称和数字编号
  ? 网络选择模式
  3.8) SignalStrength实现Parcelable接口,包含手机信号强度的相关信息。
  3.9) SmsManager管理短信操作,如发送数据,文本和PDU的短信。通过调用静态方法SmsManager.getDefault()这个对象。
  3.10) SmsMessage一个短消息服务信息。
  3.11) TelephonyManager用于访问有关设备上的电话服务的信息。应用程序可以使用这个类的方法来确定电话服务和状态,以及访问某些类型的用户信息。应用程序还可以注册一个监听者,接收的电话状态变化的通知。你不直接实例化这个类,而是你通过android.content.Context的getSystemService方法检索到一个实例。请注意,访问的一些电话信息受权限保护。除非你的应用程序在manifest文件中声明有适当的权限,否则将不会收到保护的信息更新。凡许可申请,他们会被记录在你访问受保护的信息的方法中。主要使用两个服务来访问telephony功能:
  ? ITelephony提供与telephony进行操作、交互的接口,在packages/apps/Phone中由PhoneInterfaceManager.java实现。
  ? ITelephonyRegistry提供登记telephony事件的接口。由frameworks/base/services/java/com/android/server/TelephonyRegistry.java实现。
  4 frameworks/base/telephony/java/com/android/internal/telephony/cdma/
  4.1) CdmaCall是Call的直接派生类。
  4.2) CdmaConnection是Connection的直接派生类。
  4.3) CDMAPhone是PhoneBase的直接派生类。
  5 frameworks/base/telephony/java/com/android/internal/telephony/gsm/
  5.1) GsmCall是Call的直接派生类,对通话过程中手机,连接的操作。
  5.2) GsmConnection是Connection的直接派生类。
  5.3) GSMPhone是PhoneBase的直接派生类。
  6 frameworks/base/telephony/java/com/android/internal/telephony
  6.1) AdnRecord实现Parcelable接口,用户加载和存储缩位拨号号码。
  6.2) BaseCommands实现CommandsInterface接口,实现了电话事件的处理(发送message给对应的handler)。
  6.3) Call得到第一次和最后一次呼叫,以及第一次呼叫的创建时间和连接时间。有两个派生类:CdmaCall和GsmCall。
  public enum State {
  IDLE, ACTIVE, HOLDING, DIALING, ALERTING, INCOMING, WAITING, DISCONNECTED, DISCONNECTING;
  public boolean isAlive() {
  return !(this == IDLE || this == DISCONNECTED || this == DISCONNECTING);
  }
  public boolean isRinging() {
  return this == INCOMING || this == WAITING;
  }
  public boolean isDialing() {
  return this == DIALING || this == ALERTING;
  }
  }
  6.4) CallerInfo由电话号码来查看通话者的信息。
  6.5) CallerInfoAsyncQuery异步查询。
  6.6) CommandsInterface 描述了对电话的所有操作接口,如命令, 查询状态,以及电话事件监听等。由BaseCommands实现该接口。
  6.7) Connection对连接过程一些数据的处理。有两个派生类:CdmaConnection和GsmConnection。
  public enum DisconnectCause {
  NOT_DISCONNECTED,/* has not yet disconnected */
  INCOMING_MISSED,/* an incoming call that was missed and never answered */
  NORMAL,/* normal; remote */
  LOCAL,/* normal; local hangup */
  BUSY,/* outgoing call to busy line */
  CONGESTION,/* outgoing call to congested network */
  MMI,/* not presently used; dial() returns null */
  INVALID_NUMBER,/* invalid dial string */
  LOST_SIGNAL,
  LIMIT_EXCEEDED,/* eg GSM ACM limit exceeded */
  INCOMING_REJECTED,/* an incoming call that was rejected */
  POWER_OFF,/* radio is turned off explicitly */
  OUT_OF_SERVICE,/* out of service */
  ICC_ERROR,/* No ICC, ICC locked, or other ICC error */
  CALL_BARRED,/* call was blocked by call barrring */
  FDN_BLOCKED,/* call was blocked by fixed dial number */
  CS_RESTRICTED,/* call was blocked by restricted all voice access */
  CS_RESTRICTED_NORMAL,/* call was blocked by restricted normal voice access */
  CS_RESTRICTED_EMERGENCY,/* call was blocked by restricted emergency voice access */
  UNOBTAINABLE_NUMBER,/* Unassigned number (3GPP TS 24.008 table 10.5.123) */
  IMSI_UNKNOWN_IN_VLR,/* IMSI is not known at the VLR */
  IMEI_NOT_ACCEPTED,/* network does not accept emergency call establishment using an IMEI */
  CDMA_LOCKED_UNTIL_POWER_CYCLE,/* MS is locked until next power cycle */
  CDMA_DROP,
  CDMA_INTERCEPT,/* INTERCEPT order received, MS state idle entered */
  CDMA_REORDER,/* MS has been redirected, call is cancelled */
  CDMA_SO_REJECT,/* service option rejection */
  CDMA_RETRY_ORDER,/* requeseted service is rejected, retry delay is set */
  CDMA_ACCESS_FAILURE,
  CDMA_PREEMPTED,
  CDMA_NOT_EMERGENCY,/* not an emergency call */
  CDMA_ACCESS_BLOCKED,/* Access Blocked by CDMA network */
  ERROR_UNSPECIFIED
  }
  6.8) DefaultPhoneNotifier实现PhoneNotifier接口。在其方法实现中,通过调用service ItelephonyRegistry来发布电话事件。
  6.9) IccCard指SIM卡或UIM卡。
  6.10) service ITelephonyRegistey由frameworks/base/services/java/com/android/server/TelephonyRegistry.java实现。这个类通过广播intent,从而触发对应的broadcast receiver。
  6.11) Phone描述了对电话的所有操作接口;SDK的开发者不能获得此接口。通过PhoneBase和PhoneProxy来实现该接口。
  enum State {
  IDLE,/没有通话 no phone activity*/
  RINGING, /*来电话(包括没有通话时来一路通话和正在通话时来新通话)a phone call is ringing or call waiting.In the latter case, another call is active as well*/
  OFFHOOK;/*挂断通话The phone is off hook. At least one call exists that is dialing, active or holding and no calls are ringing or waiting.*/
  };
  enum DataState {
  CONNECTED,/*有数据信号 IP traffic should be available*/
  CONNECTING,/*正在进行数据连接 Currently setting up data connection*/
  DISCONNECTED,/*无数据信号 IP not available*/
  SUSPENDED;/*数据连接被创建了,但是有些连接不可用。例如语音通话使用在2G网络中。 connection is created but IP traffic is temperately not available. i.e. voice call is in place in 2G network*/
  };
  public enum DataActivityState {
  NONE,/*没有数据流量No traffic*/
  DATAIN,/*接收数据Receiving IP ppp traffic(公私合作关系<PPP,public-private partnership>是公共基础设施项目<如新的电信系统、机场和电厂>的一个资助模式。PPP具有处理错误检测、支持多个协议、允许在连接时刻协商IP地址、允许身份认证等功能。适合于调制解调器、HDLC位序列线路、SONET和其它的物理层上使用。它支持错误检测、选项协商、头部压缩以及使用HDLC类型帧格式<可选>的可靠传输。)*/
  DATAOUT,/*发送数据 Sending IP ppp traffic*/
  DATAINANDOUT,/*同时接收和发送数据 Both receiving and sending IP ppp traffic*/
  DORMANT;/*数据连接可用,但是物理连接断开 The data connection is still active,but physical link is down*/};
  enum SuppService {
  UNKNOWN, SWITCH, SEPARATE, TRANSFER, CONFERENCE, REJECT, HANGUP;
  };
  APN的英文全称是Access Point Name,中文全称叫接入点,是您在通过手机上网时必须配置的一个参数,它决定了您的手机通过哪种接入方式来访问网络。
  6.12) PhoneBase实现Phone接口,对Phone的基本实现。Phone.java预计从单一的应用程序线程实现,同一线程从PhoneFactory获取接口。有两个派生类:CDMAPhone和GSMPhone。
  6.13) PhoneNotifier定义电话事件的通知方法。通过DefaultPhoneNotifier来实现该接口。
  6.14) PhoneProxy实现Phone接口,实现了Phone所有函数。当不需要区分具体是CDMA Phone还是GSM Phone时,可使用PhoneProxy。
  6.15) ? RIL继承BaseCommands类,实际实现CommandsInterface中的接口方法。
  RILRequest代表一个电话服务命令请求,RILSender负责处理命令的发送,RILReceiver用户监听socket处理命令响应以及主动上报信息的接收。
  RIL通过Socket和rild守护进程进行通讯。RIL将抽象的接口转化为封装电话服务命令的具体函数实现,如acceptCall或者dial,将它转换成对应的RIL_REQUEST_XXX发送给rild。
  命令发送的标准流程:RILRequest.obtain(RIL_REQUEST_XXX,result)-->复制参数-->send发送EVENT_SEND-->RILSender处理EVENT_SEND-->将RIL_REQUEST_XXX写到out stream(socket)。RILReceiver在run()中建立socket。
  响应和主动上报的标准流程:RILReceiver监听socket输入-->readRilMessage读取完整响应-->processResponse分别处理RESPONSE_UNSOLICITED(主动上报)与RESPONSE_SOLICITED(命令响应)。
  send和processResponse是异步的,即电话服务命令的发送和响应是异步的。
  上层通过GSMPhone对RIL进行了一层封装,通过Phone接口来提供RIL所实现的绝大部分功能。在Phone应用程序中,通过PhoneFactory.makeDefaultPhonesàPhoneFactory.useNewRILàPhoneFactory.registerPhone获取GSMPhone实例。

更多相关文章

  1. Android实现程序前后台切换效果
  2. Android(安卓)ScrollView 实现小说阅读界面自动滚屏
  3. AppBarLayout中android:fitsSystemWindows="true"无效的解决办法
  4. android JNI 调用
  5. 在android使用mina实现网络访问
  6. android通过chmod命令实现文件权限修改
  7. Android(安卓)AIDL接口定义语言
  8. Android,采用AIDL编写接口实现IPC 入门
  9. Android(安卓)APP使用自定义字体实现方法

随机推荐

  1. Android(安卓)多媒体应用——MediaRecord
  2. 【安卓】选项卡之顶部选项卡(简易)
  3. 关于 unity5.3.1 录制 animation 带有 ro
  4. android之AndroidManifest.xml简述
  5. android2.3-adb源码分析
  6. 安卓控件之文本框(TextView)
  7. Android(安卓)Scroller简介 ---- 界面滚
  8. MultiDex源码分析
  9. 十款 Material Design 风格的 Android(安
  10. 关于处理器架构的一点儿知识