`
wuhua
  • 浏览: 2111800 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android 源码分析-打电话和发短信

阅读更多
1. ITelephony接口和ISms接口以及AIDL 在我们的 Android 应用中,当需要实现电话拨号时,我们需要进行如下调用 ITelephony phone = (ITelephony)ITelephony.Stub.asInterface(ServiceManager.getService(phon)) phone.dial(10086); 对于 短信 应用,我们需要
  1. ITelephony接口和ISms接口以及AIDL
   在我们的Android 应用中,当需要实现电话拨号时,我们需要进行如下调用
   ITelephony phone = (ITelephony)ITelephony.Stub.asInterface(ServiceManager.getService("phon"))
   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类的实现
如下图所示
phone.png
下载 (9.14 KB)
昨天 20:36

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实例。对应的UML类图结构如下
uml.png
下载 (26.62 KB)
昨天 20:36

4。GSMPhone与RIL
   从GSM的构造器可以看出,他依赖一个CommandInterface接口实例,通过PhoneFactory的makeDefaultPhones方法,我们可以看到,根据系统 环境变量
ro.radio.noril来判断是否需要采用RIL框架实现,如果该参数不为空,则采用Simultedcommands(主要是为了测试需要提供的模拟实现).否则,采用RIL。
   通过Google 才知道,RIL其实是智能手机 上实现AP与BP之间通信的一种设计思想,具体大家可以参见这篇文章http://www.eetchina.com/ARTICLES/2006OCT/PDF/CPCOL_2006OCT26_EMB_TA_170.PDF?SOURCES=DOWNLOAD
   在RIL.java 中我们很惊喜的看到,RIL对对消息的处理是将消息通过LocalSocket发送到以rild为名称的有名端口。这个有名Socket的创建在ril.cpp代码中。
   s_fdListen = android_get_control_socket(SOCKET _NAME_RIL)
   原来Android通话和发短信的应用是JAVA与C++代码之间透过Socket连接来传输消息来实现的。
整个应用的代码可以概括如下图示意
android.jpg
下载 (45.62 KB)
昨天 20:36

5.关于C代码与硬件之间的交互
   这部分工作其实就是C代码通过串口发送AT指令来拨号,收发短信。今天有点累了,具体的实现下次我再分析。
分享到:
评论
2 楼 lyxh_2003 2010-08-24  
强烈BS,转载也不把图拷贝一下。
1 楼 女巫の微笑 2010-07-14  
跟没讲一样

相关推荐

    Android 完整的通讯录项目源码

    【Android 完整的通讯录项目源码】是一款基于Android平台的实现通讯录功能的应用程序。这个项目提供了从系统中读取联系人信息、编辑联系人、搜索联系人以及管理联系人分组等一系列完整的功能。下面我们将深入探讨这...

    Android源码——仿Siri的中文语音助理源码.7z

    4. **服务调用**:语音助理的功能往往包括打电话、发短信、查询天气、设定闹钟等。这些功能的实现需要调用Android系统的相应API,如`Intent`来启动电话拨号界面,或者使用`AlarmManager`来设置闹钟。 5. **UI设计**...

    Android应用源码之SMSLisenter.zip

    通过分析和学习这份源码,我们可以深入理解Android系统中处理短信的机制,以及如何在应用层面上对短信事件进行响应。 首先,Android系统的短信服务主要依赖于`TelephonyManager`类,它提供了访问电话功能的接口,...

    该语音助手界面仿照苹果的SIRI,采用科大讯飞的API做语音和语义识别,包括打电话、发短信、打开应用、翻译、聊天机器人等数十项功能

    8. **源码分析**:对于开发者而言,这个项目提供了Android源码,可以深入研究其架构设计、数据处理流程以及如何集成科大讯飞API,对于学习和开发类似应用有极大的参考价值。 通过以上这些功能,这款语音助手充分...

    Android仿Siri的中文语音助理源码.zip源码资源下载

    3. **命令执行**:根据用户的指令,调用相应的功能模块,如打电话、发短信、打开应用等。这部分可能包含了大量的Intent操作。 4. **反馈机制**:使用`TextToSpeech`将机器的响应转换成语音,反馈给用户。需要设置...

    基于android手机通讯录的设计与实现的毕业论文.doc

    本系统包括存储、删除、修改、打电话、发信息、发邮件、备份 SD 卡等功能,满足了用户对通讯录的需求。本软件利用 Android 提供的各种组件对界面进行设计,能够很好地支持用户体验。 知识点: 1. Android 手机操作...

    基于Android智能手机的车载监控管理系统

    随着移动互联网技术的飞速发展,智能手机不仅仅局限于打电话和发短信的基本通讯功能,而是逐渐成为人们工作、学习和娱乐的重要工具。在此背景下,结合3G网络的普及和智能手机硬件性能的提升,智能手机平台为地理信息...

    JAVA上百实例源码以及开源项目源代码

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

Global site tag (gtag.js) - Google Analytics