【Android架构GPS篇】之GPS定位应用层流程
一直想搞明白定位数据传输从GPS模块到应用层APK的整个流程:Linux串口驱动、Android HAL、Android Framework、最终应用程序,同时也了解下每个层次都对数据做了什么限制与手脚!
这里先了解下应用层流程。
根据这个框架,GPS在应用层实现的最基本流程示例:
- public class MainActivity extends Activity {
- private LocationManager mLocationManager;
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mLocationManager.removeUpdates(locationListener);
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- /* 记得在AndroidManifest.xml文件中开启GPS相关的权限!!! */
- mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
- /* 检测GPS定位模块是否开启 */
- if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
- /* 针对GPS定位模块是否开启,具体接下来做的事 */
- return;
- }
- Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
- updateLocationMessage(location);
- /* 监听GPS的状态变化 */
- mLocationManager.addGpsStatusListener(listener);
- /* 监听GPS的位置变化
- * 这里指定2000ms或者移动距离超过4m的时候更新一次位置信息,但是
- * 经过实际测试,更新间隔精确度极低,根本不按套路走。实际使用的话,还是采用Send Measage方式
- */
- mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 4, locationListener);
- }
- /* 监听GPS的状态变化 */
- GpsStatus.Listener listener = new GpsStatus.Listener() {
- public void onGpsStatusChanged(int event) {
- switch (event) {
- /* 第一次获取到定位信息 */
- case GpsStatus.GPS_EVENT_FIRST_FIX:
- break;
- /* 卫星状态发生变化,捕获到卫星/卫星不可见 */
- case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
- break;
- case GpsStatus.GPS_EVENT_STARTED:
- break;
- case GpsStatus.GPS_EVENT_STOPPED:
- break;
- }
- };
- };
- private LocationListener locationListener = new LocationListener() {
- @Override
- public void onLocationChanged(Location location) {
- updateLocationMessage(location);
- }
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- switch (status) {
- case LocationProvider.AVAILABLE:
- break;
- case LocationProvider.OUT_OF_SERVICE:
- break;
- case LocationProvider.TEMPORARILY_UNAVAILABLE:
- break;
- }
- }
- @Override
- public void onProviderEnabled(String provider) {
- }
- @Override
- public void onProviderDisabled(String provider) {
- }
- };
- private void updateLocationMessage(Location location) {
- }
- }
上面提到的是GPS最基础的框架流程,此外它还有你想得到、想不到的其他许多用法与功能。
在Android的location包中,所有与定位相关的类和接口如下:
类 |
Address |
representing an Address, i.e, a set of Strings describing a location 描述地址信息 |
Criteria |
indicating the application criteria for selecting a location provider 根据自己要求,选择LocationProvider |
|
Geocoder |
handling geocoding and reverse geocoding 处理地理位置信息的编码 |
|
GpsSatellite |
representing the current state of a GPS satellite 描述GPS卫星当前状态 |
|
GpsStatus |
representing the current state of the GPS engine 描述GPS设备的当前状态 |
|
Location |
representing a geographic location sensed at a particular time 描述地理位置信息,如经度、纬度、高度、方向、运动速度等 |
|
LocationManager |
provideing access to the system location services 用于调用、管理系统定位服务,是整个定位服务的入口、核心 |
|
LocationProvider |
An abstract superclass for location providers. A location provider provides periodic reports on the geographical location of the device 描述location providers的抽象超类,是真正用来获取位置信息的 |
|
接口 |
GpsStatus.Listener |
receiving notifications when GPS status has changed 接收GPS状态改变时的通知 |
GpsStatus. NmeaListener |
receiving NMEA sentences from the GPS 接收GPS的NMEA信息 |
|
LocationListener |
receiving notifications from the LocationManager when the location has changed 接收GPS位置信息改变时的通知 |
【Android架构GPS篇】之GPS定位应用层流程相关推荐
- 【Android架构GPS篇】之定位数据如何从GPS芯片到应用层
原址:http://blog.csdn.net/u013686019/article/details/47444839 写在前面 在漫长的Android源码编译等待过程中,想起之前写过一部分的Andr ...
- android 数据业务,【Android架构Telephony篇】之数据业务(一)
Android: 4.4.4 Desktop: Ubuntu 15.04 这里只做一些准备事情. 不得不说,Android里的Telephony模块还是挺复杂的,要想搞个八九分清楚需要花点功夫.今天把 ...
- 一篇关于GPS定位写得最详实清晰的文章之一
一篇关于GPS定位写得最详实清晰的文章之一 介绍篇 过去,如果你的女友是个路痴,大概会有这样的对话-- --你在哪儿呢? --啊?我在马路上啊. --有什么特征? --头顶有个月亮. --你旁边有什么 ...
- Android附近基站+Wifi+IP+GPS多渠道定位方案
wifi定位wiki:https://developers.google.com/maps/documentation/geolocation/intro 前言: 在移动客户端的开发中,地理位置定位是 ...
- android功耗(23)---gps定位开发省电要点
android手机gps定位开发省电要点 android手机使用GPS定位会非常费电.google工程师在quora上做了具体的解释,有兴趣可以看看 https://www.quora.com/Bat ...
- android项目入门实践之GPS用户定位
学习内容 Ø GPS的概念和用途 Ø LocationManager和LocationProvider Ø LocationListener 能力目标 Ø 掌握GPS的概念和用途 Ø 掌握如何利用DD ...
- Android 通过Service 实现后台GPS定位
前言 做移动GIS开发经常会使用到定位功能,很多时候通过代码里的手写定位代码在Activity中就实现了.虽然比较简单,但是也会有一些问题,比如定位慢,代码杂乱.一直都知道可以通过Service进行后 ...
- GPS定位详解——涉及GPS版本变化、定位获取失败等常见问题。
GPS详解 GPS本身并不复杂,但是因为GPS本身定位比网络还慢的原因用好GPS还是需要费点事的. GPS详解 1. GPS相关类说明(android.location包) 1.1. 主要必须涉及到的 ...
- Android架构篇-1 项目组织架构
Android架构篇-1 项目组织架构 模块化分层 1.结构清晰,各模块代码分离,符合高内聚低耦合,快速定位查找代码 2.团队协作开发灵活,互不影响,各模块完成后合并即可完成整体app 3.抽离公共层 ...
最新文章
- Mybatis常用标签使用
- jboss\server\default\.\tmp 拒绝访问 axis2
- 盘一盘推荐系统里值得一读的那些论文
- ALBERT第一作者亲自讲解:Transformer、BERT、ALBERT、XLNet全面解析
- @Nullable 注解的用法
- java获取系统信息:java的信息、操作系统的信息、用户的信息、虚拟机的信息、系统设置的信息。
- web一键返回顶端html代码,CSS-返回顶部代码_html/css_WEB-ITnose
- 2022上海Java工资收入概览
- windows删除“找不到该项目”的文件
- 软件架构设计思维导图
- 如果宇宙是答案,那么问题是什么?
- 北邮计算机 六级,【北邮晚安】大学宿舍关系分六级,你在哪一层?
- 如何分辨HDD/SSD硬盘接口?
- 5.18 对表格按行进行排序 [原创Excel教程]
- WebBrowser怎么指定ie内核
- Debian搭建SVN服务器
- 掘金茅台,三位投资客的暴富人生
- 跨境电商系列 | 防范第三方脚本对数据隐私与安全的侵蚀
- 粉末成型工艺(粉末冶金粉末注射成型)
- ERP系统如何通过存储过程导出报表数据
热门文章
- 超酷的界面原型设计工具Balsamiq Mockups
- zookeeper核心面试问题及解答
- 多少开发人员 饿了么_饿了么CPS新社交电商,2020年的创业新风口
- 【现代机器人学】名词概念的理解
- html底部线条,这种APP底部横线+文字该怎么布局?css
- sql alwayson群集 registerallprovidersip改为0_技术分享 | 从 MySQL 8.0 复制到 MySQL 5.7
- git commit规范工具
- 02-CSS基础与进阶-day6_2018-09-05-22-02-24
- 修改官方发行openstack镜像的cloud-init登录方式为账号密码登录
- 震波——动态点分治+线段树