应用程序暂停时 gps 位置停止

gps location stalls when app is paused

使用 google location.getlatitiude 和 location.getlongitude

location = locationManager.getLastKnownLocation(locationProvider);
Latitude = location.getLatitude();
Longitude = location.getLongitude();

这是在每 5 秒触发一次的循环可运行程序中完成的。到目前为止一切顺利。

当我 "pause" 应用程序(点击后退按钮所以应用程序在后台 运行)时,上述调用不会获得新位置(它们会不断返回之前的最后一个经度和纬度暂停)。

我知道 runnable 仍在触发,因为我也在 runnable 期间写入 Web 数据库并且正在访问和更新数据库(只是停滞的纬度和经度值)。

一旦应用程序 unpaused/resumed 变得可见,经度和纬度读数将恢复并正确更新。

location、locationManager 和 locationProvider 是 Runnable 之外的全局变量,在设置 runnable 之前创建和验证 运行,因此在应用程序暂停时创建它们不是问题。

关于暂停导致此问题的原因有什么想法吗?我已经在 2 部不同的手机上进行了测试。两者结果相同。有什么方法可以让 location 或 locationmanager 在应用程序暂停时继续工作吗?

你看过 FusedLocationProviderApi 了吗?

您有两种方法可以根据需要控制更新:

LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, this);

LocationServices.FusedLocationApi.removeLocationUpdates(
                            mGoogleApiClient,this);

当应用程序在后台运行时,如果您不调用 removeLocationUpdates,您仍会收到有关您的位置的更新。 查看文档的这一页:

https://developer.android.com/training/location/receive-location-updates.html

FusedLocationProvider 是我需要的提示。

mLocationRequest = new LocationRequest();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(5000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setSmallestDisplacement(10);
getFusedLocationProviderClient(getApplicationContext()).requestLocationUpdates(mLocationRequest, new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
           Toast.makeText(getApplicationContext(),locationResult.getLastLocation().getLatitude()+" "+locationResult.getLastLocation().getLongitude()+" "+locationResult.getLastLocation().getAccuracy(), Toast.LENGTH_SHORT).show();
        }
    },
    Looper.myLooper());

那段代码可以放在main里面 activity oncreate。即使应用程序暂停,它也会每 5 秒触发一次。以前我使用服务等来尝试让它工作。新的 FusedLocationProvider 非常简单(一旦找到工作代码)。希望以上内容对其他人有所帮助。