拨出电话流程:
1
contacts的androidmanifest.xmlandroid:process="android.process.acore"说明此应用程序运行在acore进程中。DialtactsActivity的intent-filter的action属性设置为main,catelog属性设置为launcher,所以此activity能出现,
2
进入TwelveKeyDialer OnClick方法,按住的按钮id为:R.id.digits,执行
placecall()
Intent intent = newIntent(Intent.ACTION_CALL_PRIVILEGED,
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
3、
intert.ACTION_CALL_PRIVILEGED实际字符串为android.intent.action.CALL_PRIVILEGED,通过查找知道了packegs/phone下面的androidmanifest.xml中PrivilegedOutgoingCallBr
onCreate()
//如果为紧急号码马上启动intent.setClass(this,InCallScreen.class); startActivity(intent);
Intent broadcastIntent = new Intent(Intent.ACTION_NEW_OUTGOING_CALL);
4、Intent.ACTION_NEW_OUTGOING_CALL实际字符串为android.intent.action.NEW_OUTGOING_CALL,通过查找知道了packegs/phone
下面的androidmanifest.xml中OutgoingCallReceiver Receiver接收此intent消息。找到OutgoingCallReceiver,执行
onReceive()函数
Intent newIntent = new Intent(Intent.ACTION_CALL, uri);
5、请求拨号的java部分流程
onCreate(第一次)/onNewIntent(非第一次)
internalResolveIntent
acquireWakeLock();
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
上面步骤:为APP就是java层传下的信息(就是执行的动作:按键打电话),已经做完,下面讲RIL层如何来接受上层来的信息
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第一、《创建轮询机制》
6.请求拨号的c/c++部分流程
/*初始化事件循环,启动串口监听,注册socket监听*/
6.1在til/rild/rild.c为入口函数
RIL_startEventLoop()
6.2在libril/ril.cpp
第一、建立事件循环线程
ret = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL);
RIL_startEventLoop(void){
..........
ret = pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL);//创建线程,为入口函数,去实现它的功能
}
--------------------------------------------------------------------
eventLoop入口函数->跳到/ril/libril/ril.cpp 实现
----------------------------------------------------------------------
eventLoop(void *param)
{
ril_event_init();/*初始化*/
void ril_event_init()
{