应用程序暂停时 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 非常简单(一旦找到工作代码)。希望以上内容对其他人有所帮助。
使用 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 非常简单(一旦找到工作代码)。希望以上内容对其他人有所帮助。