最近在做定位相关的东西,把知识整理一下并分享出来。

1.定位有三种,网络,基站,GPS

2.不管哪种定位核心是要取得经纬度,你知道了经纬度要换算成具体地理位置的方法是有很多种的

以下分别讲述三种的实现:

◆GPS

比较简单

按 Ctrl+C 复制代码

public String mac;
    TextView msg;
    LocationManager locationManager;
    LocationListener locationListener;

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        msg = (TextView) findViewById(R.id.text);
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        // 定义对位置变化的监听函数
        locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                msg.setText("onLocationChanged" + location.getLatitude() + ",,"
                        + location.getLongitude());
                Log.e("onLocationChanged", location.getLatitude() + ",,"
                        + location.getLongitude());

}

public void onStatusChanged(String provider, int status,
                    Bundle extras) {
            }

public void onProviderEnabled(String provider) {
            }

public void onProviderDisabled(String provider) {
            }
        };
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0
, locationListener);

}

按 Ctrl+C 复制代码

关于GPS需要注意的地方就是首先你手机定位设置那里要打开GPS,还有manifest.xml中相关的权限要写进去(一搜一大把,不赘述),最后记得在户外测试,室内是测试不到GPS的。

◆基站

这一块你要自己实现也是可以的,不过复杂程度远比你想的要多一些。要获取基站信息可以使用Android自带的API,这很简单如以下代码

    private void getCellInfo() throws Exception {/** 调用API获取基站信息 */TelephonyManager mTelNet = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);GsmCellLocation location = (GsmCellLocation) mTelNet.getCellLocation();if (location == null)throw new Exception("获取基站信息失败");String operator = mTelNet.getNetworkOperator();Log.e("基站信息", operator);String mcc = operator.substring(0, 3);String mnc = operator.substring(3,5);int cid = location.getCid();int lac = location.getLac();Log.e("具体基站信息", "mcc=" + mcc + ",mnc=" + mnc + ",lac=" + lac + ",cid="+ cid);}

但是你要吧基站信息转为经纬度就比较麻烦了,这里当然最权威的是google了,网络上也找过一些其他的免费网站,很显然不靠谱,我相信你搜出过这样的API接口http://www.google.com/loc/json,我很负责任的告诉你,这个接口用不了,现在停用了,如果你研究了半天,一直在想post过去的数据为什么不行,然后发现原来是这个API停用了,那我觉得你现在看到我这篇文章是幸福的,所以还是用google把,下面进入此网站https://developers.google.com/maps/documentation/business/geolocation/这里面就有我们需要的信息,我找了很久,google maps各种相关的API都找过了,这里有我们需要的通过基站信息得到经纬度的API,不过它是基于商业的,测试每天100次上限,发布后应该要用收费的,具体费用没查了。不要觉得这个很容易,我相信你花了半天在测试的时候会发现更多衍生出来的问题。而且需要有英语阅读能力,对于大部分人来说门槛过高了,建议略过。因为基站实际情况下并不太好用,比如手机没SIM卡和平板的情况下,是用不了基站的。

◆网络

最建议大家使用的还是网络定位,因为网络实在太普遍的,移动设备现在基本都能上网,当然我这说的是wifi情况下的。3G的没条件测试过,这里请不要使用android自带的API,如

    locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0, locationListener);

因为国内大部分手机被阉割过了,你运气好的话,也许能获取到数据,如果运气不好,搞了半天你发现是手机系统被阉割后的问题,我想你可能会抓狂的。所以网络定位我们不能依赖Android API了。这里就推荐一下百度定位把,我测试了下,速度蛮好,也还准。地址如下http://developer.baidu.com/map/sdk-android.htm。然后如图所示

看一下里面的simple中的MyLocation类,简单明了,快速解决问题。不过国外没测试过,不知道百度能不能用在国外了。当然google maps中android版SDK应该也有相应的功能,不过有点繁琐了,比如你只定位国内的话,相信百度可以了,如果是国际上,那google永远是你的首选

完结!

关于android上的定位相关推荐

  1. Android 上面的定位和Poi检索

    平台:android web服务器 需求: 1:持续定位服务    2:支持多家地图,可扩展 API : 1:高德定位sdk : http://lbs.amap.com/api/android-loc ...

  2. android小米定位,Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框示例...

    背景 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利. 但随后发现,在小米系 ...

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

    用户定位介绍: User Location的作用: 1.获取用户的位置 2.追踪用户的移动 User Location的关键API 1.Location Manager:用于管理Android的用户定 ...

  4. 微软程序在Android上跑,想在Win 10上运行Android应用?这类手机用户已经可以尝鲜...

    在Win 10上运行Android应用?这听起来有些异想天开,可实实在在的需求却在这里,毕竟微软Windows体系内的无缝切换,离开了手机平台始终有些怪怪的,自然,微软也不会甘心放弃,最好的办法,莫过 ...

  5. java线上问题定位_java定位线上问题

    3.jstack: Java 提供的命令.可以查看某个进程的当前线程栈运行情况.根据 这个命令的输出可以定位某个进程的所有线程的当前运行状态.运行代码,以及 是否死锁等等...... A.//int ...

  6. Tensorflow object detection API 搭建自己的目标检测模型并迁移到Android上

    参考链接:https://blog.csdn.net/dy_guox/article/details/79111949 之前参考上述一系列博客在Windows10下面成功运行了TensorFlow A ...

  7. 自动化无法定位的原因_Appium Android 自动化测试 -- 元素定位

    自动化测试元素定位是难点之一,编写脚本时会经常卡在元素定位这里,有时一个元素能捣鼓一天,到最后还是定位不到. Appium 定位方式和 selenium 一脉相承,selenium 中的定位方式App ...

  8. android开发GPS定位测试(附效果图和示例)【转】

    本人做了GPS相关的嵌入式软件已经几年了,所以说起要做个测试 GPS定位模块的程序,第一反应就是串口读取GPS模块的数据,然后解析GPS的NMEA格式数据 今天因为工作需要,把以前编写的一个GPS测试 ...

  9. android延迟时间设置,控制Android上的延迟

    Android音频延迟一直都是所有应用的问题之一.虽然通常延迟低于100ms,但有些设备的延迟高达150ms. 在最近的操作系统版本中,谷歌引入了"快速音频路径".如果满足一些条件 ...

最新文章

  1. 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
  2. 深入思考全局静态存储区、堆区和栈区
  3. 首次使用计算机鼠标键盘不能用,解决方案:如何解决无法使用计算机鼠标和键盘的问题?如果启动后无法使用鼠标和键盘该怎么办?...
  4. ASP.NET+MVC+使用+Log4net+记录日志笔记
  5. 《从零开始学ASP.NET CORE MVC》:ASP.NET Core 中的 Main方法(5)
  6. JSP引入CSS文件无法生效的问题
  7. 前端学习(1059):ES6中的类和对象
  8. 免费wordpress主题在线生成网站
  9. JavaScript之arguments属性
  10. 正在发生的景象--从大众消费到圈层经济
  11. C语言人工智能 |教你与智能AI对弈三子棋 从此不再孤单寂寞冷
  12. 【杂项】任务管理器的专用GPU内存和共享GPU内存
  13. Texmacs使用注意事项
  14. 突破限制轻松下载网盘的文件,免登陆使用,速度也不错!
  15. python打九九乘法表上三角下三角_python经典练习题之九九乘法表、打印菱形、打印对顶三角形、斐波拉契数列、素数... - 小黑电脑...
  16. 配置SMTP发信认证
  17. 操作系统磁盘调度算法
  18. oracle连续月份列表,Oracle实现查询2个日期所跨过的月份列表/日期列表的方法分析...
  19. assert()详解
  20. 表单设计器—HTML元素操作

热门文章

  1. Floodlight 入门 之 起步篇 - 如何处理PacketIN消息
  2. chrome 搜索框记录_访问Google Chrome中的搜索框
  3. 【33】Android WebView加载html5 3D全景
  4. Redis 事件机制详解
  5. ZingChart 图表插件
  6. 七夕节最深情表白文案从此告别搓衣板
  7. [Python]校园网(网页认证)开机/断网自动连接
  8. 用python玩转数据第一周答案_用Python玩转数据_答案
  9. php 启动时候提示 PHP startup
  10. python什么是字符串_什么是Python的字符串