定位,算是android应用中一个非常常见的功能了吧,并且大部分的应用里基本也都会用到地图,所以以前的做法基本都是直接接入了百度、高德这些第三方定位,也没遇到过什么问题。

然而,最近的工作基本上都是做一些这样那样的小工具,某些功能里的确涉及到定位功能,并且还没有地图的使用,如果这样还是接入百度高德这些未免就有些画蛇添足了,使用gps功能就足够了。

大致看了下LocationManager类的几个方法,也就是常用的几个方法,然后再找篇帖子,大笔一挥,申请权限、打开位置服务、取经纬度,然后。。。卧槽,经纬度呢,怎么没返回??赶紧再去搜几篇帖子看看问题能否找到原因,千篇一律的内容,无外乎使用

LocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

或者

LocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,x,x,LocationListener);

然后还是获取不到经纬度,又有人说了,是定位要提前开启,requestLocation要提前调用,然后也照做了,还是不行。网上的帖子真的是复制粘贴居多,最终也没解决问题,算了,还是再看看LocationManager里还有哪些没用到的方法吧。还真就发现了一个,getBestProvider,之前都是自己指定的provider,这个居然名字都这么直白暴力,返回最好的provider,赶紧看了下方法说明

/**

*@param criteriathe criteria that need to be matched

*@param enabledOnly if true then only a provider that is currently enabled is returned

*@returnname of the provider that best matches the requirements

*/

public String getBestProvider(Criteria criteria, booleanenabledOnly) {

checkCriteria(criteria);

try{

returnmService.getBestProvider(criteria,enabledOnly);

} catch (RemoteException e) {

throwe.rethrowFromSystemServer();

}

}

然后就赶紧试了下该方案是否能够成功返回,具体操作还是直接上代码吧,比较直观

public class LocationUtils implements LocationListener {

private static volatile LocationUtils instance;

private CLocationListener mLocationListener;

private LocationManager mLocationManager;

private Context context;

private String mProviderName;

//为避免内存泄漏,此处传入的一定要是application上下文对象

public static LocationUtils getInstance(Context context) {

if (instance == null) {

synchronized (LocationUtils.class) {

if (instance == null) {

instance = new LocationUtils(context);

}

}

}

return instance;

}

public LocationUtils(final Context context) {

this.context = context;

new Handler(Looper.getMainLooper()).post(new Runnable() {

@Override

public void run() {

try {

mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

// 查找到服务信息

Criteria criteria = new Criteria();

// 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细

criteria.setAccuracy(Criteria.ACCURACY_FINE);

// 设置是否要求速度

criteria.setSpeedRequired(false);

// 设置是否需要海拔信息

criteria.setAltitudeRequired(false);

// 设置是否需要方位信息

criteria.setBearingRequired(false);

// 设置是否允许运营商收费

criteria.setCostAllowed(true);

// 设置对电源的需求

criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗

// 为获取地理位置信息时设置查询条件

mProviderName = mLocationManager.getBestProvider(criteria, true); // 获取GPS信息

if (!TextUtils.isEmpty(mProviderName)) {

mLocationManager.requestLocationUpdates(mProviderName, 1000, 0, LocationUtils.this);

}

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

public static boolean isGpsEnabled(Context context) {

return ((LocationManager) context.getSystemService(Context.LOCATION_SERVICE)).isProviderEnabled(android.location.LocationManager.GPS_PROVIDER);

}

public void requestLocationUpdates(CLocationListener listener) {

mLocationListener = listener;

}

public void removeUpdates() {

mLocationListener = null;

}

@Override

public void onLocationChanged(Location location) {

if (mLocationListener != null) {

mLocationListener.onLocationChanged(location);

}

}

@Override

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

}

@Override

public void onProviderEnabled(String provider) {

Location location = mLocationManager.getLastKnownLocation(provider);

if (mLocationListener != null) {

mLocationListener.onLocationChanged(location);

}

}

@Override

public void onProviderDisabled(String provider) {

}

public interface CLocationListener {

void onLocationChanged(Location location);

}

}

就简单写了几个方法,大致就是这样了,如果需要其他的方法,可以自行根据业务需求进行添加。

不过值得一提的是,位置信息服务的打开,现在的手机基本都是支持三种模式,高准确度模式、低耗电模式、仅限设备模式,前两种因为都支持网络定位,所以即便在室内也能成功返回经纬度,而最后一种仅限设备模式就是仅仅使用设备的gps定位而不使用网络定位,这样的话在室内测试基本不会返回结果,但是在室外开阔地带没有问题(亲测),有需要的朋友可以自行测试。

android 百度坐标 gps,Android中gps定位不返回经纬度的解决方案相关推荐

  1. linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案

    Python中使用subprocess.Popen返回值乱码解决方案 问题描述 在python 2.7中,使用subprocess.Popen()调用*nix命令,并通过管道,获取其输出,并将其返回值 ...

  2. Android百度地图开发(二)定位之自动定位及标注(及定位几日内瓦或坐标4.9E-324问题)

    接上篇Android百度地图开发(一)之Hello BaiduMap 1.环境配置: 新增权限如下 <!-- 这个权限用于进行网络定位--> <uses-permission and ...

  3. Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...

  4. Android百度地图海拔,android studio百度地图SDK获取当前位置和经纬度和海拔

    网上很多获取位置的博文,但是感觉都不是很全面. 最近刚好有一个项目要求获取当地的经纬度和地理位置 几经折腾,终于还是写出来了.文分享一下. 代码如下 先在AndroidManifest中添加如下权限 ...

  5. android 高德坐标对象,android: 高德地图

    分为地图,定位,搜索(我还没做导航功能) 建议采用gradle方式集成 添加依赖 在project/build.gradle文件下添加jcenter的仓库地址 allprojects { reposi ...

  6. android 百度周边雷达,android 百度地图SDK 3.7.0 周边雷达-Radar 周边搜索-PoiSearch

    因为项目需要,最近研究了下百度地图的SDK,简单记录一些点. 准备工作 1.下载SDK及demo 2.申请key key需要用到app的包名和签名证书的SHA1值 如果需要使用 周边雷达 功能,需要再 ...

  7. android百度api配置,Android Studio 配置使用百度api (附带简单样例)(示例代码)

    还是和同学开发的那个课程作业项目的app, 要使用到百度地图的api 但是,官方文档貌似只有Eclipse的例子,对Android Studio似乎没有说明.  难道,是因为后者是 "Doo ...

  8. android 百度开发论坛,Android 百度地图开发(一)

    现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用 申请密钥 使用白度地图首先需要申请API Key,申请百度账户才能得到API Key. 登录 http:/ ...

  9. android 百度语音 对话框,Android 通过调用系统接口使用如 谷歌语音、百度语音、讯飞语音等语音识别对话框的方法...

    现在app的开发进程会集成一些语音识别功能,而一般开发者是不具备自己开发一套语音识别引擎的,因此大多数情况是选择一个已经成熟的语音识别引擎SDK集成到自己的app中. 通常情况下,这种集成分两种,一种 ...

最新文章

  1. mysql命令导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决
  2. VTK:网格之Triangulate
  3. mysql if exists用法_MySQL中EXISTS的用法
  4. matplotlib 快速绘图
  5. 运维跟开发一定有仇么?
  6. 直接调用内置数据源连接对话框(C#/VB.NET2005源码)
  7. 男性玩家占78.8%、90后玩家占近50%、最多人选择中国风链游……《2019链游玩家需求调研报告》重磅发布!...
  8. CCleaner系统优化
  9. 第一次安装和接触RubyonRails
  10. 7款堪称神器的黑科技App,每一款都是黑科技十足!
  11. c语言源程序注释说明只能,C语言选择题
  12. 怎么禁用计算机usb驱动,在Windows中启用或禁用USB驱动器或端口的5种方法 | MOS86...
  13. 如何做好软件项目管理工作?
  14. 漫话:如何给女朋友解释为什么12306会用户信息泄露(上)——密码篇
  15. kettle连接sap出现错误报错信息(127) JCO_ERROR_FIELD_NOT_FOUND : Field DATUM not a member of INPUT
  16. Android蓝牙inputstream,java – 无法在Android平台上使用InputStream为蓝牙套接字创建ObjectInputStream...
  17. 机器人行业五大趋势:中国成为机器人投资狂热爱好者
  18. Redis缓存吊打面试官 25 问
  19. Arrays.sort() and 吾欲仁则斯仁至矣
  20. 【win7/win10】虚拟机安装与简单配置教程

热门文章

  1. cdh6.3.2安装
  2. MATLAB语言入门的第一步
  3. matlab语言学习(第一部分)
  4. java-php-python-ssm基于网络的城市交通应急管理系统计算机毕业设计
  5. java 将当前日期转换为 24 小时制时间字符串
  6. Java面试题集(136-150)
  7. 知网CAJ文件内容复制小助手
  8. 密码加盐(盐值salt)
  9. 湖北2020年最新CMMI3-CMMI5通过的企业名单,看看没有你们公司
  10. matlab基本矩阵运算,MATLAB矩阵及其运算