1

我有一个 android 应用程序,它将从背景跟踪位置。我正在使用具有以下配置的融合位置 api

    mLocationRequest = new LocationRequest();
    mLocationRequest.setSmallestDisplacement(100);
    mLocationRequest.setInterval(60*1000);
    mLocationRequest.setFastestInterval(60*1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

仅当设备移动时,我才需要位置更新。有时一切正常。但有时即使设备处于静止状态,我也会收到位置更新。

为什么会出现这个问题?如果我设置位移,我需要设置间隔和最快间隔吗?这个问题与谷歌播放服务版本有关吗?

4

3 回答 3

0

使用 GoogleApiClient 请求您的位置更新,例如像这样并使用 Toasts 来验证您的实施:

 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    float LOCATION_REFRESH_DISTANCE = 5000;
    long LOCATION_REFRESH_TIME = 0;
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, mlocationListener);
    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    if(mLastLocation!=null){
        Toast.makeText(getApplicationContext(), "YES! mLastLocation!=null", Toast.LENGTH_SHORT).show();
        double latitude = mLastLocation.getLatitude();
        double longitude = mLastLocation.getLongitude();           
        Toast.makeText(getApplicationContext(), "Latitude = " + latitude + "\nLongitude = " + longitude, Toast.LENGTH_SHORT).show();
    }
}

在这里,您可以使用变量LOCATION_REFRESH_DISTANCELOCATION_REFRESH_TIME(以毫秒为单位)参数化您的位置请求

你当然需要mLocationListener你的 GoogleApiClientmGoogleApiClient需要的 LocationListener 对象来获取最后一个已知/当前位置和一个 Location 对象(我称之为它mLastLocation)存储它的位置。例如。:

private Location mLastLocation;
LocationListener mlocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
    mLastLocation=location;

}

@Override
public void onStatusChanged(String s, int i, Bundle bundle) {

}

@Override
public void onProviderEnabled(String s) {

}

@Override
public void onProviderDisabled(String s) {

}
};
于 2016-06-26T16:49:33.640 回答
0

如果您的手机移动或不考虑您给定的间隔持续时间,它将每 60 秒更新一次您的位置。

于 2015-09-25T06:26:00.920 回答
0

您可能需要的是PendingIntent 版本的 FusedLocationProviderApi。此方法适用于后台用例,更具体地说,适用于接收位置更新,即使应用程序已被系统杀死。

于 2016-10-08T12:46:08.193 回答