Android 的定位分层架构

本文详细介绍了Android GPS定位服务的系统架构,包括应用层、系统框架层、JNI层、HAL层、Linux内核层和GPS硬件设备层之间的依赖关系。此外还讲解了定位请求流程、权限检查方法以及不同定位模式的特点。

Android GPS定位服务的系统架构共分为六层
应用层,系统框架层,JNI层、HAL层、linux内核层、GPS硬件设备层
从上至下它们是逐层依赖的关系,每层依赖下面一层完成其所需提供的服务。
【概要定位流程】:由应用层APP发起定位请求,调用Framework层提供的API接口,此时会去启动一个定位服务的线程,通过LocationManagerService定位服务,会调用到对应的Location provider,然后通过native方法调用到JNI中,JNI获得GpsInterface并传递给接口一个回调函数的实现。GpsInterface是HAL层最主要的实现。

最上面是应用层,可安装基于定位服务的应用,这些应用可以发起定位请求,比如百度地图等。

第二层是框架层(framework层),这一层包含了被APP调用的API以及系统服务的实现,主要由 Java 语言来实现。
a. Java语言实现的API,即android.location包中的内容,主要用来被APP调用
目录:frameworks/base/location/java/android/location
b.系统服务实现
目录1:frameworks/base/location/java/com/android/internal/location
这个目录是Framework对Location服务的内部实现
目录2:framework\base\services\core\java\com\android\server
这个目录中的LocationManagerService.java是Location服务对内部实现的一种封装

JNI层只有一个文件,起到承上启下的作用。上层承接Framework,下层调用HAL层具体硬件抽象实现。
目录:
frameworks/base/services/core/jni/com_android_server_location_GpsLocationProvider.cpp

第四层是共享库层(HAL层),本层由 C 以及 C++ 语言实现, 框架层与共享库层使用 JNI进行衔接。HAL层相当于一个linux应用程序接口,通过open,close等操作,操作硬件设备。
目录:
hardware/qcom/gps
hardware/libhardware/include/hardware/gps.h

第五层是 Linux内核层,整个Android系统都是以Linux内核为基础的。

最底层是GPS硬件设备层

判断App是否获得定位权限

checkPermissionGranted(Manifest.permission.ACCESS_COARSE_LOCATION)
private boolean checkPermissionGranted(String permission) {
   
   
     return this.checkPermission(permission, Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED;
}

方法二
在API>=23(6.0)的Android系统中,可以使用


                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值