androidGPS驱动( 五 )


3、其他函数,开启导航,关闭导航等的就不一一介绍了,和上面的类似 。可以看源码 。
好了,jni层就大概分析好了,那么接着就是层的代码了 。
九、 GPS的层
首先还是主要流程图吧:

androidGPS驱动

文章插图
层主要就是为上层应用调用提供接口 。而GPS的层,根据jni的代码我们也可以知道就在下面这个目录下了 。
/base//java/com////.java
那么 是怎么开始往下调用jni的呢?还是看代码吧 。
首先是在/base//java/com///.Java
对于这个系统服务,还是要从启动流程讲起,首先linux内核启动完了之后,会调用的init程序,然后挂载文件最小系统,解析init.rc和init.*.rc等脚本,接着,启动虚拟机,然后就是运行到了了,也就是上面那个.Java函数,在这个函数中,先看下 这个类,发现了有一个的init1函数 。
void init1([]args);
这个函数是调用了jni层的函数的,可以看
/base//jni/.cpp
首先是进入其main函数,
[html] view plain copy
.("");init1(args);
加载库,然后就是调用了jni层的init1函数 。
[html] view plain copy
it1(*env,){();}
其调用了();函数,而在函数中
[html] view plain copy
=env->(clazz,"init2","()V");env->(clazz,);
他又回调了.Java中的init2函数 。
在init2函数中
[html] view plain copy
(){Slog.i(TAG,"!");=();thr.("..");thr.start();}
创建了一个线程,最后他会调用到的run方法 。
在其run()方法中会启动很多服务,比如 、、、 、、 、Alarm 、、 等等,我们这里最主要的就是关注ce 。
[html] view plain copy
try{Slog.i(TAG,"");=rvice();.(.,);}catch(){("ger",e);}
这里new了一个ce对象,并且添加了这个 。
然后= ;
[html] view plain copy
try{if(!=null).();}catch(){("",e);}
当 好了之后就调用了.();函数了 。
下面进ce.java中的函数 。
[html] view plain copy
(){//=(null,this,"ce");.start();}
这里创建了一个线程,然后线程启动了,接着他会调用run方法 。也就是
[html] view plain copy
(){.(.);.();=dler();();.loop();}
在run方法中,他会初始化一些东东,也就是();函数了 。
[html] view plain copy
e(){//,()=().(.);=.(.,);//();………………………………}
这里主要看();函数 。
[html] view plain copy
ders(){(mLock){if(){;}//();=true;}}
这里又会调用(),然后是()函数 。其中就会调用到我们需要的了 。
[html] view plain copy
if(.()){//=er(,this);=.();r=.ner();();=;}
在new一个的时候会开一个hread的线程
[html] view plain copy
=();.start();
然后启动了线程,在这里会初始化,然后主要还是new了一个的类 。
[html] view plain copy
();=();
这个类中
[html] view plain copy
age(){=msg.what;(){:if(msg.arg1==1){();}else{();}break;:(msg.arg1==1);break;HOT:hot();break;TATE:tate(msg.arg1,()msg.obj);break;:();break;TA:if(){ta();}break;:(()msg.obj);break;:(msg.arg1);break;:(msg.arg1);break;}
就会处理很多事情了 。具体可以看上面的代码 。
接着他调用了d();这个函数 。
(name,true);
然后就启动了gps服务了
[html] view plain copy
if(){p.();if(>0){p.((),);p.ng(true);}}
接着我们开始往.java这里看
[html] view plain copy
(){(){(,1,null);}}
这里发送了一个消息,然后就会调用到上面的函数,();
[html] view plain copy
ble(){……=();if(){=();……}
这里就会调用到了jni的函数了 。
而的所有函数,在jni中我们都已经分析过了 。
接着便是
函数结束后,那便是