1.LocationManager

LocationManager系统服务是位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题。

与LocationManager相关的两个知识点:

1.1 provider

LocationManager获取位置信息的途径,常用的有两种:GPS和NETWORK。GPS定位更精确,缺点是只能在户外使用,耗电严重,速度较慢NETWORK通过蜂窝网络或无线网络来获取位置信息,室内室外均可用,速度较快,耗电较少。

为了获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。

1.2LocationListener

位置监听器接口,定义了常见的provider状态变化和位置的变化的方法,我们需要实现此接口,完成自己的处理逻辑,然后让LocationManager注册此监听器,完成对各种状态的监听。

2.LocationManager的使用

一般情况下,在Service里使用比较常用。

  1. public class GPSService extends Service {
  2. private LocationManager lm;
  3. private MyLocationListener listener;
  4. @Override
  5. public IBinder onBind(Intent intent) {
  6. // TODO Auto-generated method stub
  7. return null;
  8. }
  9. @Override
  10. public void onCreate() {
  11. // TODO Auto-generated method stub
  12. super.onCreate();
  13. lm = (LocationManager) getSystemService(LOCATION_SERVICE);
  14. listener = new MyLocationListener();
  15. // 注册监听位置服务
  16. // 给位置提供者设置条件
  17. Criteria criteria = new Criteria();
  18. criteria.setAccuracy(Criteria.ACCURACY_FINE);
  19. String proveder = lm.getBestProvider(criteria, true);
  20. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
  21. && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  22. return;
  23. }
  24. lm.requestLocationUpdates(proveder, 0, 0, listener);
  25. //注册位置更新监听(最小时间间隔为5秒,最小距离间隔为5米)
  26. //lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, listener);
  27. }
  28. @Override
  29. public void onDestroy() {
  30. super.onDestroy();
  31. // 取消监听位置服务
  32. if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
  33. && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  34. return;
  35. }
  36. lm.removeUpdates(listener);
  37. listener = null;
  38. }
  39.  
  40. class MyLocationListener implements LocationListener{
  41. /**
  42. * 当位置改变的时候回调
  43. */
  44. @Override
  45. public void onLocationChanged(Location location) {
  46. String longitude = "j:" + location.getLongitude() + "\n";
  47. String latitude = "w:" + location.getLatitude() + "\n";
  48. String accuracy = "a" + location.getAccuracy() + "\n";
  49. }
  50.  
  51. /**
  52. * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启
  53. */
  54. @Override
  55. public void onStatusChanged(String provider, int status, Bundle extras) {
  56. // TODO Auto-generated method stub
  57. }
  58.  
  59. /**
  60. * 某一个位置提供者可以使用了
  61. */
  62. @Override
  63. public void onProviderEnabled(String provider) {
  64. // TODO Auto-generated method stub
  65. }
  66.  
  67. /**
  68. * 某一个位置提供者不可以使用了
  69. */
  70. @Override
  71. public void onProviderDisabled(String provider) {
  72. // TODO Auto-generated method stub
  73. }
  74. }
  75. }

Android开发——GPS定位的更多相关文章

  1. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  2. Android开发--用户定位服务--UserLocation

    Android开发--用户定位服务--UserLocation 2013-01-28 08:32:26     我来说两句      作者:BruceZhang 收藏    我要投稿 [java] & ...

  3. Android中GPS定位的简单应用

    在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...

  4. android 获取GPS定位

    AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...

  5. 【Android】GPS定位基本原理浅析

    位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文 ...

  6. Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结

    最近公司要开发android 所以研究了一下Xamarin  to android 中个GPS 废话不多说,说重点. 想获取手机上的gps信息必不可少的就是要使用 LocationManager Lo ...

  7. Arcgis API for Android之GPS定位

    欢迎大家增加Arcgis API for Android的QQ交流群:337469080 先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己曾经在做相关工作的时候做过相关的 ...

  8. Arcgis For Android之GPS定位实现

    翻开曾经做的东西,看了看,非常多从逻辑上比較乱,对之做了改动,完毕后实现的效果为: MapActivity源码例如以下: package com.lzugis.map; import java.io. ...

  9. Android之GPS定位详解

    一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger ...

随机推荐

  1. SpringBoot | 问题 | 注解方式下无法发现Bean

    在排除注解的问题后,考虑扫描类的位置, [SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项 ...

  2. byte的范围-128-127

    01111111  表示的是最大的数字 是127这个没有问题  ,前面的0 表示的正数,1表示的负数 而负数在计算机中的存储都是通过补码的形式存在的,也就是说 1 1111 111 是计算机中最小的数 ...

  3. [LOJ6041雅礼集训2017]事情的相似度

    题解 \(SAM+set\)启发式合并+扫描线 首先可以发现题目要求的就是查询结尾在一段区间内的\(LCS\) 这个显然就是\(SAM\)的\(parent\)树上的\(step[LCA]\) 我们可 ...

  4. Hdu 5442 Favorite Donut (2015 ACM/ICPC Asia Regional Changchun Online 最大最小表示法 + KMP)

    题目链接: Hdu 5442 Favorite Donut 题目描述: 给出一个文本串,找出顺时针或者逆时针循环旋转后,字典序最大的那个字符串,字典序最大的字符串如果有多个,就输出下标最小的那个,如果 ...

  5. Codeforces Round #544 (Div. 3) A.Middle of the Contest

    链接:https://codeforces.com/contest/1133/problem/A 题意: 给两个时间点,求中间时间点. 思路: 数学 代码: #include <bits/std ...

  6. AtCoder Beginner Contest 057 ABCD题

    A - Remaining Time Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Dol ...

  7. datapatch meet ORA-01422

    [现象] datapatch ORA-01422: e [解决方法]sample 1: --step 1:sqlplus /nologconn /as sysdbacreate table regis ...

  8. HDU 1220 B - Cube

    http://acm.hdu.edu.cn/showproblem.php?pid=1220 一开始的做法是,先暴力算出一个面,就是n * n的面,能有多少对.记作face 然后从上开始算下来,最上一 ...

  9. SpringMvc返回@ResponseBody中文乱码

    使用SpringMvc的@ResponseBody返回指定数据的类型做为http体向外输出,在浏览器里返回的内容里有中文,会出现乱码,项目的编码.tomcat编码等都已设置成utf-8,如下返回的是一 ...

  10. REST风格笔记

    这一篇主要是看了FB的覃超大大的文章,做了一些笔记和自己的思考.    定义: 用URL来定义资源,用HTTP(GET/POST/DELETE/DETC)来描述操作.    1. REST描述的是网络 ...