美文网首页Android深入
Android获取经纬度

Android获取经纬度

作者: 主音King | 来源:发表于2020-07-02 09:51 被阅读0次

    通过Android的原生api获取经纬度;
    一些文章都是通过mLocationManager.getProviders,getLastKnownLocation来获取的,但是在一些手机上总是为空。
    例如:在一些手机Android 5.0(api21 联想手机)上getLastKnownLocation获取总为空。
    可以通过getBestProvider来获取provider然后通过getLastKnownLocation获取得到经纬度。

    private Location getLastKnownLocation() {
            //获取地理位置管理器
            LocationManager mLocationManager = (LocationManager) getApplicationContext().getSystemService(LOCATION_SERVICE);
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO:去请求权限后再获取
                return null;
            }
            List<String> providers = mLocationManager.getProviders(true);
            Location bestLocation = null;
            for (String provider : providers) {
                Location l = mLocationManager.getLastKnownLocation(provider);
                if (l == null) {
                    continue;
                }
                if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
                    bestLocation = l;
                }
            }
    // 在一些手机5.0(api21)获取为空后,采用下面去兼容获取。
            if (bestLocation==null){
                Criteria criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_COARSE);
                criteria.setAltitudeRequired(false);
                criteria.setBearingRequired(false);
                criteria.setCostAllowed(true);
                criteria.setPowerRequirement(Criteria.POWER_LOW);
                String provider = mLocationManager.getBestProvider(criteria, true);
                if (!TextUtils.isEmpty(provider)){
                    bestLocation = mLocationManager.getLastKnownLocation(provider);
                }
            }
            return bestLocation;
        }
    
    // 使用
     Location location = getLastKnownLocation();
     LogUtils.d(TAG, "有位置权限-纬度:" + location.getLatitude() + " 经度:" + location.getLongitude());
    

    相关文章

      网友评论

        本文标题:Android获取经纬度

        本文链接:https://www.haomeiwen.com/subject/qqslqktx.html