android开发之ITelephony接口和ISms接口以及AIDL

  次阅读 作者:智能小宝 来源:互联网 2016-01-13 21:53 我要评论(0)

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指令来拨号,收发短信

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...