Android获取当前位置经纬度(非第三方地图集成)
16lz
2021-12-04
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
因此不推荐使用该方式
还是建议通过高德地图 或者百度地图去获取 当前位置的经纬度较准确!!!
更多相关文章
- Android(安卓)Volley 库通过网络获取 JSON 数据
- Android(安卓)技巧记录
- Android传感器编程入门(二)
- [Android][获取Android设备唯一标识]
- Android(安卓)Sudio 如何获取开发版SHA1和发布版SHA1
- Android(安卓)Wi-Fi Ethernet新IP获取机制—IpManager(Android(
- Android获取联系人
- android获取网络类型
- Android(安卓)关闭后台音频播放