博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于android上的定位
阅读量:5745 次
发布时间:2019-06-18

本文共 3028 字,大约阅读时间需要 10 分钟。

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

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

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

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

◆GPS

比较简单

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);    }

关于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接口,我很负责任的告诉你,这个接口用不了,现在停用了,如果你研究了半天,一直在想post过去的数据为什么不行,然后发现原来是这个API停用了,那我觉得你现在看到我这篇文章是幸福的,所以还是用google把,下面进入此网站这里面就有我们需要的信息,我找了很久,google maps各种相关的API都找过了,这里有我们需要的通过基站信息得到经纬度的API,不过它是基于商业的,测试每天100次上限,发布后应该要用收费的,具体费用没查了。不要觉得这个很容易,我相信你花了半天在测试的时候会发现更多衍生出来的问题。而且需要有英语阅读能力,对于大部分人来说门槛过高了,建议略过。因为基站实际情况下并不太好用,比如手机没SIM卡和平板的情况下,是用不了基站的。

◆网络

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

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

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

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

完结!

转载地址:http://ydxzx.baihongyu.com/

你可能感兴趣的文章
关于爱情只有一句忠告
查看>>
CentOS 7下安装部署Oracle11g图文教程
查看>>
F#初学笔记06
查看>>
实战:将企业域名解析委派给企业DNS服务器
查看>>
在Lync 2013环境部署Office Web Apps
查看>>
微软大会Ignite,你准备好了么?
查看>>
读书笔记-高标管事 低调管人
查看>>
Master带给世界的思考:是“失控”还是进化
查看>>
用户和开发者不满苹果iCloud问题多多
查看>>
java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
查看>>
我的工具:文本转音频文件
查看>>
【许晓笛】从零开始运行EOS系统
查看>>
【跃迁之路】【460天】程序员高效学习方法论探索系列(实验阶段217-2018.05.11)...
查看>>
C++入门读物推荐
查看>>
TiDB 源码阅读系列文章(七)基于规则的优化
查看>>
面试中会遇到的正则题
查看>>
Spring之旅第八站:Spring MVC Spittr舞台的搭建、基本的控制器、请求的输入、表单验证、测试(重点)...
查看>>
数据结构与算法——常用排序算法及其Java实现
查看>>
你所不知的Webpack-多种配置方法
查看>>
React.js 集成 Kotlin Spring Boot 开发 Web 应用实例详解
查看>>