Google  developer url: https://developer.android.com/training/location/permissions

Demo GitHub: https://github.com/JasonZhangHG/LocationUtils.git

1.动态获取经纬度权限

2.获取经纬度:根据 LocationManager  NETWORK_PROVIDERGPS_PROVIDERPASSIVE_PROVIDER 去获取

  public static void getLocation(final ICallback<LocationBean> callback) {if (ActivityCompat.checkSelfPermission(CCApplication.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(CCApplication.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {if (callback != null) {callback.onError(new Throwable("no permission"));}return;}String mLocationProvider;final LocationManager locationManager = (LocationManager) CCApplication.getInstance().getSystemService(Context.LOCATION_SERVICE);if (locationManager == null) {if (callback != null) {callback.onError(new Throwable("locationManager null"));}return;}List<String> providers = locationManager.getProviders(true);LocationListener locationListener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {
//                updateLocation(location, callback);}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}};if (providers == null || providers.isEmpty()) {if (callback != null) {callback.onError(new Throwable("providers null"));}return;}if (providers.contains(LocationManager.NETWORK_PROVIDER)) {locationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, locationListener, null);mLocationProvider = LocationManager.NETWORK_PROVIDER;} else if (providers.contains(LocationManager.GPS_PROVIDER)) {locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, locationListener, null);mLocationProvider = LocationManager.GPS_PROVIDER;} else if (providers.contains(LocationManager.PASSIVE_PROVIDER)) {locationManager.requestSingleUpdate(LocationManager.PASSIVE_PROVIDER, locationListener, null);mLocationProvider = LocationManager.PASSIVE_PROVIDER;} else {if (callback != null) {callback.onError(new Throwable("providers contains null"));}return;}Location location = locationManager.getLastKnownLocation(mLocationProvider);updateLocation(location, callback);}public static void updateLocation(Location location, final ICallback<LocationBean> callback) {if (location == null) {if (callback != null) {callback.onError(new Throwable("location null"));}return;}double latitude = location.getLatitude();double longitude = location.getLongitude();Log.i(TAG, "latitude : " + latitude + "  longitude : " + longitude);getAddress(latitude, longitude, callback);}

3.根据经纬度去解析具体位置:主要是Geocoder-->getFromLocation

  public static void getAddress(double latitude, double longitude, final ICallback<LocationBean> callback) {Geocoder geocoder = new Geocoder(CCApplication.getInstance(), Locale.ENGLISH);try {List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);Address address = addresses != null && addresses.size() > 0 ? addresses.get(0) : null;if (address != null) {String countryName = address.getCountryName();String countryCode = address.getCountryCode();Log.i(TAG, "countryName : " + countryName + "  countryCode : " + countryCode);if (callback != null) {callback.onResult(new LocationBean(latitude, longitude, countryName, countryCode, address.toString()));}} else {if (callback != null) {callback.onError(new Throwable("address null"));}}} catch (IOException e) {e.printStackTrace();if (callback != null) {callback.onError(e);}}}

4.最终结果:

使用Android 原生 API获取经纬度并且根据经纬度解析出当前具体位置信息相关推荐

  1. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  2. Android开发:基于原生API获取位置信息、卫星信号个数及参与定位的卫星个数

    目录 概述 权限申请及开启GPS 调用原生API进行定位 获取设备收到的卫星信号个数 获取用于定位的卫星信号个数 成果图 概述 最近在做室内外无缝定位的相关demo,室外定位中,GNSS定位方法具有精 ...

  3. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

  4. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  5. 【Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

    文章目录 一. 图片质量压缩 二. 图片尺寸压缩 三. Android 10 文件访问 四. 完整源码示例 上一篇博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供 ...

  6. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

  7. JavaScript调用原生API获取手机型号

    跨平台技术简介 针对原生开发面临问题,人们一直都在努力寻找好的解决方案,而时至今日,已经有很多跨平台框架,根据其原理,主要分为三类: H5+原生(Cordova.Ionic.微信小程序) JavaSc ...

  8. 调用腾讯地图API、高德地图API 获取当前地理位置、经纬度

    调用腾讯地图API.高德地图API 获取当前地理位置.经纬度 web开发中,很多情况下都会需要获取当前位置的经纬度,在网上找了几个不同的地图,最终找到兼容比较好的腾讯地图API 1.调用腾讯地图API ...

  9. python获取某地铁站经纬度_python通过百度地图API获取某地址的经纬度详解

    前言 这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方便的,本文将给大家详细的介绍关于python通过百度地图A ...

  10. Android 调用原生API获取地理位置和经纬度,判断所在国家

    public static boolean isCN(Context context) {TelephonyManager tm = (TelephonyManager) context.getSys ...

最新文章

  1. R构建KNN多分类模型
  2. 存在于实数域的微观粒子
  3. 读取SBT项目resources目录中的文件
  4. SendMessage CString
  5. springboot websocket_SpringBoot 集成 WebSocket 实现前后端消息互传
  6. 在语言中的运算符中,处于同一优先级别的运算符还分优先次序吗?
  7. 使用Lex工具进行tiny+语言的词法分析
  8. java第七章jdbc课后简答题_Java周测题08.13
  9. ubuntu mysql自动备份文件_Ubuntu下开展MYSQL自动备份
  10. 简单Linux磁盘管理
  11. 超绝万圣节主题设计海报背景,搞节日气氛靠它没问题!
  12. Linux环境下实现简易的DNS域名解析过程
  13. Windows安装Scala步骤详解
  14. 使用outlook邮件服务器,使用OUTLOOK配置邮件服务
  15. 基于JavaEye-API实现的Gerry-聊天Dos版v1.0
  16. Android O 开机动画铃声
  17. iOS 开发者必知的 75 个工具(译文)
  18. Sicily 1154. Easy sort
  19. Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight respon
  20. 国内两家3D打印企业入选微软加速器创业加速计划

热门文章

  1. 最短曼哈顿距离(递推+枚举 C++)
  2. 2021年4月程序员工资统计排行
  3. mysql spider引擎安装_【转】MySQL之Spider存储引擎原理详解
  4. mybatis plus 生成代码 保存方法主键报错 nested exception is org.apache.ibatis.reflection.ReflectionException: Cou
  5. php数据存储mysql_php mysqli 存储数据库
  6. 自然语言处理是什么?学习自然语言处理(NLP)
  7. c语言中calloc是什么意思,C语言中malloc和calloc以及relloc函数的区别
  8. (八)博客详情页面(内容排版typo.css)插件集成
  9. LE250UQ激光位移传感器
  10. 网络下载的图始终与北京坐标有偏移,坐标对不准,用arcgis自带的WGS84与beijing54坐标转换2解决