重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
android 电话服务就是通过AT来实现的,不过不是java应用层直接发AT
创新互联公司主要从事成都做网站、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务防城港,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
而是通过socket,把命令发到RIL层,RIL筛选AT命令,与底层交互,实现电话的各个功能
你可以查一查RIL的实现
[img]上图清楚的标识了ril在整个Android系统各层的表现形式,我们这里主要分析Ril(RIDL、librefrenece_ril.so、libril.so);
…/Hardware/ril/rild RILD的代码实现,有main函数,作为ril层的入口点,常驻系统进程,负责与上下层交互
…/Hardware/ril/libril 负责与守护进程交互???
…/Hardware/ril/reference-ril/ Ril库的实现,主要负责与modem进行交互
实现详细分析:
从init.rc中service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -d /dev/ttyUSB1 -u /dev/ttyUSB2
可以知道,Android启动时,系统会启动一个与ril相关的service (ril-daemon),其入口命令为/system/bin/rild
(一)那么首先看看rild(/hardware/ril/rild/*);该目录下有两文件radiooptions.c、rild.c
Radiooptions.c 看Makefile知道最终会被编译成radiooptions二进制工具,放在/system/bin/下面,具体用法我在这里就不说了,我到终点里面执行一下,把他的help信息打出了,再详细的就自己看吧,源码不长,也不复杂。
# radiooptions
拨出电话流程:
1 在系统源码这个路径下/packages/apps/Phone/src/com/android/phone/DialtactsActivity.java
contacts的androidmanifest.xmlandroid:process="android.process.acore"说明此应用程序运行在acore进程中。DialtactsActivity的intent-filter的action属性设置为main,catelog属性设置为launcher,所以此activity能出现, 首先启动的就是这个activity在主菜单中,并且是点击此应用程序的第一个界面。dialtactsactivity包含四个tab,分别由TwelveKeyDialer、RecentCallsListActivity,两个activity-aliasDialtactsContactsEntryActivity和DialtactsFavoritesEntryActivity分别表示联系人和收藏tab,但是正真的联系人列表和收藏是由ContactsListActivity负责。
2
进入TwelveKeyDialer OnClick方法,按住的按钮id为:R.id.digits,执行
详细
Android源码目录下的build/envsetup.sh文件,描述编译的命令
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
要想使用这些命令,首先需要在android源码根目录执行. build/envsetup.sh 脚本设置环境
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件
下面举个例子说明,假设我要编译android下的\hardware\libhardware_legacy\power模块,当前目录为源码根目录,方法如下:
1、. build/envsetup.sh
2、mmm hardware/libhardware_legacy/power/
编译完后 运行 make snod
会重新将你改过的模块打入到system.img中