1. ITelephony接口和ISms接口以及AIDL
       在我们的Android 应用中,当需要实现电话拨号时,我们需要进行如下调用
        ITelephony phone =(ITelephony)ITelephony.Stub.asInterface(ServiceManager.getService("phone"))
        phone.dial("10086");
       对于短信 应用,我们需要的是调用SmsManager,代码如下
       SmsManager manager = SmsManager.getDefault();
       manager.sendTextMessage("10086",null,"hi,this is sms",null,null);
       这里,SmsManager对ISms做了一层包装,实质上是通过调用
       ISms simISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));
      simISms.sendRawPdu....

应用都是采用AIDL来实现IPC的跨进程调度。
       对于AIDL应用,调用进程方存在的是一个实现接口的Pro xy对象,通过Proxy对象与被调用进程中的Stub对象进行通讯来实现IPC的跨进程调度,所以,在被调用进程一端必定有一个ITelephony.Stub类以及ISms.Stub类的实现

2. PhoneInterfaceManager和SimSmsInterfaceManager
       ITelephony.Stub 的实现类为com.android.phone.PhoneInterfaceManager
       ISms.Stub的实现类为com.android.internal.telephony.gsm.SimSmsInterfaceManager
       从这两个类的构造器的调用代码里可以很清楚的看到进行了Service的注册工作
      ServiceManager.addService("phone",this);
      ServiceManager.addService("isms",this);

3. PhoneApp,InCallScreen,PhoneUtils及其他相关类
       从SimSmsInteferManager的相关方法实现中可以看到,具体就是调用GSMPhone的SmsDispatcher实例来进行相关操作的。
       从PhoneInterfaceManager会维持一个Phone对象的引用,当拨号应用时,PhoneInterfaceManager会将构造好的 Intent传递给PhoneApp应用,该Intent的className指定则为InCallScreen,从中我们可以看到 InCallScreen具体是通过PhoneUtils调用Phone的相关方法来实现。
       PhoneInterfaceManager怎么获取到对应的Phone对象,然后又怎么将Phone对象传递到InCallScreen中呢?
       具体这里涉及到了PhoneApp这个类,从这个类维护了一个 PhoneInterfaceManager的引用(phoneMgr)以及一个Phone引用(phone),从该类的onCreate方法中我们可以 清楚的看到,PhoneApp通过PhoneFactory获取了一个Phone实例,并通过该实例实现了PhoneInterfaceManager对 象。因此,我们现在只需要关PhoneFactory具体提供的是一个什么样的Phone实例了。另外,PhoneApp类还提供了一个静态方法 getInstance供InCallScreen调用,InCallScreen正是通过调用该方法获得PhoneApp实例从而获得对应的Phone 实例的。接下来,我们通过查看PhoneFactory的方法可以看到,Phone对象对应的就是一个GSMPhone实例。

4.GSMPhone与RIL
       从GSM的构造器可以看出,他依赖一个CommandInterface接口实例,通过PhoneFactory makeDefaultPhones方法,我们可以看到,根据系统 环境变量ro.radio.noril来判断是否需要采用RIL框架实现,如果该参数不为空,则采用Simultedcommands(主要是为了测试需要提供的模拟实现)否则,采用RIL。

5.关于C代码与硬件之间的交互
       这部分工作其实就是C代码通过串口发送AT指令来拨号,收发短信。

ITelephony接口和ISms接口以及AIDL相关推荐

  1. Go 学习笔记(71)— Go 接口 interface (接口定义、接口实现、接口调用、值接收者、指针接收者)

    1. 接口的定义 接口是和调用方的一种约定,它是一个高度抽象的类型,不用和具体的实现细节绑定在一起.接口要做的是定义好约定,告诉调用方自己可以做什么,但不用知道它的内部实现,这和我们见到的具体的类型如 ...

  2. Go 学习笔记(35)— Go 接口 interface (接口声明、接口初始化、接口方法调用、接口运算、类型断言、类型查询、空接口)

    1. 接口概念 接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节.接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 接口内部存 ...

  3. 从零开始学Go之接口(一):接口

    接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节. 接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 声明: 接口类型是由一组 ...

  4. sdio接口_多种接口的谷歌Coral模块,总有一款适合您~

    大家好,我是人见人爱的小月月.今天我们继续聊聊人工智能开发板. 一提到Coral这个名字,大家就会想到谷歌的各种黑科技.去年Google已经发布过一块秒天秒地的人工智能开发板,名字叫Coral Dev ...

  5. Java基础之Comparable接口和Comparator接口的比较

    前言 就是普普通通的写这么一篇文章,java集合类估计java程序猿都知道,那就写一点小众的. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那 ...

  6. Comparable接口和Comparator接口

    目录 1 介绍 2 Comparable接口 3 Comparator接口 4 总结 1 介绍 有这样2个人,一个人光头,一个人有黑色头发,现在不允许染发,只允许光头的带假发,理由是有头发的人没有必要 ...

  7. 转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

    http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 ...

  8. 【Android 异步操作】FutureTask 分析 ( Future 接口解析 | Runnable 接口解析 | Callable 接口解析 )

    文章目录 一.Future 接口 1.Future 接口简介 2.取消任务方法 3.Future 接口源码注释 二.Callable 接口 三.Runnable 接口 上一篇博客 [Android 异 ...

  9. 【Kotlin】接口 ( 声明 | 实现 | 接口方法 | 接口属性 | 接口覆盖冲突 | 接口继承 )

    文章目录 I . 接口总结 II . 接口声明 III . 接口实现 IV . 接口中的方法 V . 接口中的属性 ( 变量 / 常量 ) VI . 接口中的属性属性覆盖 ( 变量 / 常量 ) VI ...

最新文章

  1. apache2配置和使用
  2. 【BOOM】一款有趣的Javascript动画效果
  3. python和C语言互相调用的几种方式
  4. 观察者模式在JDK应用中的源码分析
  5. 在使用win 7 无线承载网络时,启动该服务时,有时会提示:组或资源的状态不是执行请求操作的正确状态。 网上有文章指出,解决这个问题的方法是在设备管理器中启动“Microsoft托管网络虚拟适配
  6. 关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮
  7. app inventor离线版_小鸡漫画app手机版下载_小鸡漫画好看的漫画手机版下载
  8. vCenter HA (至少VCSA6.5及以上)
  9. sd卡、U盘作为启动盘后容量变小处理方法
  10. android软件音量控制
  11. proteus仿真 引脚显示电平变化但不能显示波形
  12. Noteability和GoodNotes日常使用细节对比
  13. 大M法的介绍以及建模过程中if else的实现
  14. Spring使用RabbitMQ连接池的方法
  15. GSR2501国产2.4G PA替代RFX2401C,AT2401C,RT201
  16. 报警:Component 'MSCOMCTLOCX' or one of its dependencies .....及解决方法
  17. Python数据分析入门与实践-笔记
  18. 2013NET笔试题及答案
  19. Zhong__Docker安装和简单使用
  20. 机器学习---初识python的numpy模块

热门文章

  1. 预测未来—10年后我们的生活是什么样子?
  2. 四大组件之Service(四)-Service的线程、工作线程、权限及系统Service
  3. PC端和手机端字体显示不一致的解决办法
  4. 贝塔自助授权系统源码v1.1
  5. 微软将在新版Edge浏览器中支持广告拦截器
  6. metal分析是什么意思_metal是什么意思
  7. 基于JAVA校园外卖系统Web端计算机毕业设计源码+系统+数据库+lw文档+部署
  8. dos winrar压缩文件
  9. react-native 启动屏及App图标设置
  10. vmware workstation官网下载地址