博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 使用LocationManger进行定位
阅读量:6926 次
发布时间:2019-06-27

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

在Android应用中,往往有获取当前地理位置的需求,比如微信获取附近的人需要获取用户当前的位置,不多说,直接上例子。

public Location getLocation() {        LocationManager locManger = (LocationManager) getSystemService(Context.LOCATION_SERVICE);        List
providers_list = locManger.getAllProviders(); for (String item : providers_list) { Location loc = locManger.getLastKnownLocation(item); if (loc != null) { return loc; } } String str1 = LocationManager.GPS_PROVIDER; String str2 = LocationManager.PASSIVE_PROVIDER; String str3 = LocationManager.NETWORK_PROVIDER; return null; }   // 上面providers_list中的三个子项一般就为str1,str2,str3,这是常见的几种手机支持的定位,需要注意的是有的手机好像只支持PASSIVE_PROVIDER{我在一个项目   就是因为只写了另外两种而查不到地理位置}   // 当没有得到位置信息时,可以通过请求更新位置信息看是否能够获取位置信息   loc.requestLocationUpdates(provider, minTime, minDistance, listener);// 四个参数分别为:provider名称,请求间隔时间,更新最小距离,位置监听器

Location的一些简单用法

public void LocationMethod() {
// Location常用方法简介 Location loc = getLocation(); // loc.distanceTo(Location dest);float // loc.getAltitude();double 海拔高度 // loc.getLatitude();double // loc.getLongitude();double // loc.getSpeed();float }

要想使用Location服务,还必须添加Location的权限:<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

---------------------------------------------------修改-----------------------------------------------------------------------------
最近在项目中遇到一个问题,用上述的方法并不能很好的解决定位的问题,大多数手机用上述方法可以实现定位,但在有的手机上,仍然无法定位,最后只得使用百度定位SDK进行定位才得以解决;
一、添加一个百度定位服务及权限

二、编写实现代码

public class LocationManger {    private LocationClient mLocClient;    private BDLocationListener listener;    private Context context;    public LocationManger(Context context) {        super();        this.context = context;    }    public void getLocation() {        mLocClient = new LocationClient(context);        listener = new BDLocationListener() {            @Override            public void onReceivePoi(BDLocation arg0) {            }            @Override            public void onReceiveLocation(BDLocation location) {                if (location != null) {                    Log.e("" + location.getLatitude(),                            "" + location.getLongitude());                    mLocClient.unRegisterLocationListener(listener);                }            }        };        mLocClient.registerLocationListener(listener);        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true);        option.setAddrType("all");// 返回的定位结果包含地址信息        option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02        option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms        option.disableCache(true);// 禁止启用缓存定位        option.setPoiNumber(5); // 最多返回POI个数        option.setPoiDistance(1000); // poi查询距离        option.setPoiExtraInfo(true); // 是否需要POI的电话和地址等详细信息        mLocClient.setLocOption(option);        mLocClient.start();        if (mLocClient != null && mLocClient.isStarted()) {            mLocClient.requestLocation();        }    }}

BDLocationListener接口

BDLocationListener接口有2个方法需要实现: 1.接收异步返回的定位结果,参数是BDLocation类型参数。 2.接收异步返回的POI查询结果,参数是BDLocation类型参数。在一般的程序中,只需要重写第一个方法即可,里面返回的BDLocationo类型参数包含了经纬度信息; 

转载于:https://www.cnblogs.com/a284628487/p/3023556.html

你可能感兴趣的文章
Contoso 大学 - 3 - 排序、过滤及分页
查看>>
Sass介绍及入门教程
查看>>
libCurl的文件上传
查看>>
Can't call commit when autocommit=true(转)
查看>>
一分钟了解:String & StringBuilder & StringBuffer
查看>>
POJ2891:Strange Way to Express Integers(解一元线性同余方程组)
查看>>
如何调试Excel VBA代码
查看>>
写给自己看的小设计2 - 对象设计通用原则(序)
查看>>
学习HTML5之表单
查看>>
cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详解献给刚開始学习的人们!...
查看>>
Selenium2(WebDriver)总结(三)---元素定位方法
查看>>
SQLServer 2012异常问题(一)--故障转移群集+镜像环境导致作业执行失败
查看>>
【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)...
查看>>
ocp 1Z0-043 1-60题解析
查看>>
POJ 2777 Count Color(线段树+位运算)
查看>>
Android英文文档翻译系列(6)——LocalBroadcastManager
查看>>
Unity3D骨骼动画的分解(CleanData.Ani详解)
查看>>
java thread dump日志分析
查看>>
挑战黑客极限:Pwn2Own 2015成史上“最难”黑客大赛
查看>>
下载频道2013年超人气精华资源汇总---全都是免积分下载
查看>>