Android之Telephony各文件解释

摘要:   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实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值