原址:http://blog.csdn.net/u013686019/article/details/47018715

一直想搞明白定位数据传输从GPS模块到应用层APK的整个流程:Linux串口驱动、Android HAL、Android Framework、最终应用程序,同时也了解下每个层次都对数据做了什么限制与手脚!

这里先了解下应用层流程。

根据这个框架,GPS在应用层实现的最基本流程示例:

[java] view plaincopy print?
  1. public class MainActivity extends Activity {
  2. private LocationManager mLocationManager;
  3. @Override
  4. protected void onDestroy() {
  5. super.onDestroy();
  6. mLocationManager.removeUpdates(locationListener);
  7. }
  8. @Override
  9. public void onCreate(Bundle savedInstanceState) {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.activity_main);
  12. /* 记得在AndroidManifest.xml文件中开启GPS相关的权限!!! */
  13. mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
  14. /* 检测GPS定位模块是否开启 */
  15. if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
  16. /* 针对GPS定位模块是否开启,具体接下来做的事 */
  17. return;
  18. }
  19. Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
  20. updateLocationMessage(location);
  21. /* 监听GPS的状态变化 */
  22. mLocationManager.addGpsStatusListener(listener);
  23. /* 监听GPS的位置变化
  24. * 这里指定2000ms或者移动距离超过4m的时候更新一次位置信息,但是
  25. * 经过实际测试,更新间隔精确度极低,根本不按套路走。实际使用的话,还是采用Send Measage方式
  26. */
  27. mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 4, locationListener);
  28. }
  29. /* 监听GPS的状态变化 */
  30. GpsStatus.Listener listener = new GpsStatus.Listener() {
  31. public void onGpsStatusChanged(int event) {
  32. switch (event) {
  33. /* 第一次获取到定位信息 */
  34. case GpsStatus.GPS_EVENT_FIRST_FIX:
  35. break;
  36. /* 卫星状态发生变化,捕获到卫星/卫星不可见 */
  37. case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
  38. break;
  39. case GpsStatus.GPS_EVENT_STARTED:
  40. break;
  41. case GpsStatus.GPS_EVENT_STOPPED:
  42. break;
  43. }
  44. };
  45. };
  46. private LocationListener locationListener = new LocationListener() {
  47. @Override
  48. public void onLocationChanged(Location location) {
  49. updateLocationMessage(location);
  50. }
  51. @Override
  52. public void onStatusChanged(String provider, int status, Bundle extras) {
  53. switch (status) {
  54. case LocationProvider.AVAILABLE:
  55. break;
  56. case LocationProvider.OUT_OF_SERVICE:
  57. break;
  58. case LocationProvider.TEMPORARILY_UNAVAILABLE:
  59. break;
  60. }
  61. }
  62. @Override
  63. public void onProviderEnabled(String provider) {
  64. }
  65. @Override
  66. public void onProviderDisabled(String provider) {
  67. }
  68. };
  69. private void updateLocationMessage(Location location) {
  70. }
  71. }

上面提到的是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定位应用层流程相关推荐

  1. 【Android架构GPS篇】之定位数据如何从GPS芯片到应用层

    原址:http://blog.csdn.net/u013686019/article/details/47444839 写在前面 在漫长的Android源码编译等待过程中,想起之前写过一部分的Andr ...

  2. android 数据业务,【Android架构Telephony篇】之数据业务(一)

    Android: 4.4.4 Desktop: Ubuntu 15.04 这里只做一些准备事情. 不得不说,Android里的Telephony模块还是挺复杂的,要想搞个八九分清楚需要花点功夫.今天把 ...

  3. 一篇关于GPS定位写得最详实清晰的文章之一

    一篇关于GPS定位写得最详实清晰的文章之一 介绍篇 过去,如果你的女友是个路痴,大概会有这样的对话-- --你在哪儿呢? --啊?我在马路上啊. --有什么特征? --头顶有个月亮. --你旁边有什么 ...

  4. Android附近基站+Wifi+IP+GPS多渠道定位方案

    wifi定位wiki:https://developers.google.com/maps/documentation/geolocation/intro 前言: 在移动客户端的开发中,地理位置定位是 ...

  5. android功耗(23)---gps定位开发省电要点

    android手机gps定位开发省电要点 android手机使用GPS定位会非常费电.google工程师在quora上做了具体的解释,有兴趣可以看看 https://www.quora.com/Bat ...

  6. android项目入门实践之GPS用户定位

    学习内容 Ø GPS的概念和用途 Ø LocationManager和LocationProvider Ø LocationListener 能力目标 Ø 掌握GPS的概念和用途 Ø 掌握如何利用DD ...

  7. Android 通过Service 实现后台GPS定位

    前言 做移动GIS开发经常会使用到定位功能,很多时候通过代码里的手写定位代码在Activity中就实现了.虽然比较简单,但是也会有一些问题,比如定位慢,代码杂乱.一直都知道可以通过Service进行后 ...

  8. GPS定位详解——涉及GPS版本变化、定位获取失败等常见问题。

    GPS详解 GPS本身并不复杂,但是因为GPS本身定位比网络还慢的原因用好GPS还是需要费点事的. GPS详解 1. GPS相关类说明(android.location包) 1.1. 主要必须涉及到的 ...

  9. Android架构篇-1 项目组织架构

    Android架构篇-1 项目组织架构 模块化分层 1.结构清晰,各模块代码分离,符合高内聚低耦合,快速定位查找代码 2.团队协作开发灵活,互不影响,各模块完成后合并即可完成整体app 3.抽离公共层 ...

最新文章

  1. Mybatis常用标签使用
  2. jboss\server\default\.\tmp 拒绝访问 axis2
  3. 盘一盘推荐系统里值得一读的那些论文
  4. ALBERT第一作者亲自讲解:Transformer、BERT、ALBERT、XLNet全面解析
  5. @Nullable 注解的用法
  6. java获取系统信息:java的信息、操作系统的信息、用户的信息、虚拟机的信息、系统设置的信息。
  7. web一键返回顶端html代码,CSS-返回顶部代码_html/css_WEB-ITnose
  8. 2022上海Java工资收入概览
  9. windows删除“找不到该项目”的文件
  10. 软件架构设计思维导图
  11. 如果宇宙是答案,那么问题是什么?
  12. 北邮计算机 六级,【北邮晚安】大学宿舍关系分六级,你在哪一层?
  13. 如何分辨HDD/SSD硬盘接口?
  14. 5.18 对表格按行进行排序 [原创Excel教程]
  15. WebBrowser怎么指定ie内核
  16. Debian搭建SVN服务器
  17. 掘金茅台,三位投资客的暴富人生
  18. 跨境电商系列 | 防范第三方脚本对数据隐私与安全的侵蚀
  19. 粉末成型工艺(粉末冶金粉末注射成型)
  20. ERP系统如何通过存储过程导出报表数据

热门文章

  1. 超酷的界面原型设计工具Balsamiq Mockups
  2. zookeeper核心面试问题及解答
  3. 多少开发人员 饿了么_饿了么CPS新社交电商,2020年的创业新风口
  4. 【现代机器人学】名词概念的理解
  5. html底部线条,这种APP底部横线+文字该怎么布局?css
  6. sql alwayson群集 registerallprovidersip改为0_技术分享 | 从 MySQL 8.0 复制到 MySQL 5.7
  7. git commit规范工具
  8. 02-CSS基础与进阶-day6_2018-09-05-22-02-24
  9. 修改官方发行openstack镜像的cloud-init登录方式为账号密码登录
  10. 震波——动态点分治+线段树