- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
androidgps代码分析
几个主要的文件及目录:
frameworks/base/location/* (client部分)
frameworks/base/core/jni/android_location_GpsLocationProvider.cpp (JNI 部分)
frameworks/base/services/java/com/android/serverLocationManagerService.java(server 部分)
hardware/libhardware_legacy/gps/* (hardware 接口部分)
一是:控制通道,也就是由app层发起的比如enable或disable的控制命令。
example代码调用LocationManager.java ,再通过IPC来实现真正的调用。LocationManager.java 主要负责通信。具体的实现在LocationManagerService.java中。
接口文件是ILocationManager.aidl。在service中根据provider来创建了一个GpsLocationProvider.java,并通过JNI调 android_location_GpsLocationProvider.cpp,该文件再通过GPSInterface来调用硬件的具体实现代码。
二是: enable后的Location数据和状态上报。对于数据的上报过程,主要就是关注几个callback函数。主要代码分析如下:
在 GpsLocationProvider.java文件中enable()一个GpsLocationProvider时,会启动一个 GpsEventThread,该线程主要就是调用了native_wait_for_event();通过JNI调用到了 anroid_location_GpsLocationProvider.cpp中的 android_location_GpsLocationProvider_wait_for_event();而该event的触发是由来自硬件驱动 Location数据包的上报,底层的硬件驱动程序会把raw gps data通过pipe或其他的方式,送出来,这个要看gps驱动的实现了,我们通过自己实现的GpsInterface 来解析raw gps data并调用loaction_callback()来触发event并copy Location数据,等待到event后再调用GpsLocationProvider.java中的reportLocation()上报Location.
除了框架代码外,我们自己需要实现的代码也分为两块,一个是app层的代码,app层我也提供一个简单的代码例子,请参考以下代码:
public class LocationSample extends Activity implements LocationListener {
private LocationManager lm;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,1l,1l,this);
}
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
Log.d(TAG,location: );
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
Log.d(TAG,provider disable);
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
文档评论(0)