获取当前位置的android

时间:2016-08-24 07:59:02

标签: android android-location

我在获取当前位置时遇到问题,因为我的 MainActivity 是监听器:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER,
                MINIMUM_TIME_BETWEEN_UPDATE,
                MINIMUM_DISTANCECHANGE_FOR_UPDATE,
                new MyLocationListener()
        );

我有第二个活动,当我点击按钮时,我会计算距离我的位置的距离和我将用distanceTo传递的gps坐标,如果距离在0到200之间,则返回true。 所以我在 SecondActivity

中有一个功能
private boolean checkCoordinate(String gps) {
        LocationManager lm = (LocationManager) getSystemService(App.getContext().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) {

            return false;
        }

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

        double currentLongitude = location.getLongitude();
        double currentLatitude = location.getLatitude();

        Location loc1 = new Location("");
        loc1.setLatitude(currentLatitude);
        loc1.setLongitude(currentLongitude);



        String[] sep = gps.split(",");
        double latitude = Double.parseDouble(sep[0]);
        double longitude = Double.parseDouble(sep[1]);



        Location loc2 = new Location("");
        loc2.setLatitude(latitude);
        loc2.setLongitude(longitude);

        float distanceInMeters = loc1.distanceTo(loc2);
        if(distanceInMeters < 200){
            return true;
        }else{
            return false;
        }
    }

但问题是someTimes,也许当我不改变我的位置功能时:

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

返回null,我不明白如何知道我当前的位置,因为我已经设置了requestLocationUpdates。 所以我怎么知道我现在的位置?

1 个答案:

答案 0 :(得分:1)

如果系统中禁用了基于GPS的位置,或者自系统启动以来没有GPS修复,

getLastKnownLocation将返回null。如果您想确保有一个位置,您可以使用requestSingleUpdate - 方法,在有可用位置之前它不会返回。

如果使用特定的提供者名称不使用API​​也可能是个好主意(如果使用特定的提供者并不重要(通常,获取位置的方式并不重要)。 API包含采用Criteria - 对象而不是提供者名称的方法,您可以非常准确地定义所需的准确度等级。