Android获取当前位置经纬度(非第三方地图集成)


1 添加权限:

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>或者 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

GPS定位模式权限需要第一个 网络定位模式下的权限需要第一个或者第二个


2 创建LocationManager 对象 用于管理Android的定位服务

   // 获取当前位置经纬度        LocationManager locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);// 获取的是位置服务

3 指定LocationManager的定位方法 主要有两种方式:GPS定位和网络定位

GPS定位:更加精确,但更耗电,速度稍慢。

网络定位:提供的位置信息精度差,但速度较GPS定位要迅速 ,利用基站或WiFi访问的提供近似的位置信息。

Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

LocationManager.GPS_PROVIDER为GPS定位模式
LocationManager.NETWORK_PROVIDER为网络定位模式
这里可能会提示你若用户选择拒绝打开定位服务,则要加一个permission Check判断(动态访问权限)
alt+enter 去加即可 若用户拒绝,就会return


4 获取当前位置经纬度

double lat = location.getLatitude();//获取纬度double lng = location.getLongitude();//获取经度

 private void getCurrentPosition() { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)             != PackageManager.PERMISSION_GRANTED &&              ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)           != PackageManager.PERMISSION_GRANTED) {             // 申请权限 第一个为context 第二个可以指定多个请求的权限 第三个参数为请求码             ActivityCompat.requestPermissions(this,                     new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION},                     GlobalVariable.ACCESS_LOCATION);         }else {             //获取所有可用的位置提供器             List providers = locationManager.getProviders(true);             String locationProvider;             if(providers.contains(LocationManager.GPS_PROVIDER)){                 //如果是GPS                 locationProvider = LocationManager.GPS_PROVIDER;             }else if(providers.contains(LocationManager.NETWORK_PROVIDER)){                 //如果是Network                 locationProvider = LocationManager.NETWORK_PROVIDER;             }else{                 Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();                 return ;             }             // 调用getLastKnownLocation()方法获取当前的位置信息             Location location = locationManager.getLastKnownLocation(locationProvider);             if(location!=null) {                 lat = location.getLatitude();//获取纬度                 lng = location.getLongitude();//获取经度                 LatLonPoint latLonPoint = new LatLonPoint(lat, lng);                 // 地址逆解析                 geocoderSearch = new GeocodeSearch(this);                 geocoderSearch.setOnGeocodeSearchListener(this);                 // 第一个参数表示一个Latlng(经纬度),第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系                 RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 10, GeocodeSearch.AMAP);                 geocoderSearch.getFromLocationAsyn(query);             }         } }

实际测试中发现存在一些坑:
1 定位不准确 偏差较大
2 经常会有空指针情况出现
3 当未开启GPS 然后打开了GPS再重新调用 依旧不能获取当前位置
因为他是getLastKnownLocation
因此不推荐使用该方式
还是建议通过高德地图 或者百度地图去获取 当前位置的经纬度较准确!!!

更多相关文章

  1. Android(安卓)Volley 库通过网络获取 JSON 数据
  2. Android(安卓)技巧记录
  3. Android传感器编程入门(二)
  4. [Android][获取Android设备唯一标识]
  5. Android(安卓)Sudio 如何获取开发版SHA1和发布版SHA1
  6. Android(安卓)Wi-Fi Ethernet新IP获取机制—IpManager(Android(
  7. Android获取联系人
  8. android获取网络类型
  9. Android(安卓)关闭后台音频播放

随机推荐

  1. Android(安卓)3.0,将为对战iPad归来
  2. Android(安卓)系列 5.9使用Inkscape创建A
  3. Android面试系列2018总结(全方面覆盖Andr
  4. Android和设计模式:模板模式
  5. android就一定比java差?
  6. 安卓(android)开发应该怎么学?需要哪些基础
  7. 豪赌Web apps,谷歌Chrome开发工具直通Andr
  8. 如何发布你的Android应用程序
  9. 基于android的远程视频监控系统(已开放源
  10. 谷歌宣布Android设备累计激活量突破10亿