使用google location.getlatitiude和location.getlongitude
obj := ... (some object)
val := reflect.ValueOf(obj);
fun := val.MethodByName("hello")
fun.Call([]reflect.Value{})
这是在每5秒触发一次的重复运行中完成的。到目前为止一切都很好。
当我“暂停”应用程序时(单击后退按钮以便应用程序在后台运行)上述调用不会获得新位置(他们会在暂停前继续返回上一个经度和纬度)。
我知道runnable仍在触发,因为我还在runnable期间写入了一个Web数据库,并且数据库正在被点击和更新(只是停滞的纬度和经度值)。
一旦应用程序取消暂停/恢复并变为可见,经度和纬度读数将恢复并正确更新。
location,locationManager和locationProvider是Runnable外部的全局变量,在设置runnable运行之前创建并验证,因此在应用程序暂停时创建它们不是问题。
关于为什么暂停的任何想法会导致这种情况?我在2部不同的手机上测试过。两者都是一样的结果。有什么方法可以告诉位置或位置管理员即使应用程序暂停也能继续工作吗?
答案 0 :(得分:1)
您是否看过FusedLocationProviderApi?
您可以根据需要使用两种方法来控制更新:
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
和
LocationServices.FusedLocationApi.removeLocationUpdates(
mGoogleApiClient,this);
当应用在后台时,如果您不调用removeLocationUpdates,您仍会获得有关您所在位置的更新。 看一下文档的这个页面:
https://developer.android.com/training/location/receive-location-updates.html
答案 1 :(得分:1)
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());
该代码可以放在主要的活动oncreate中。即使应用程序暂停,它也会每5秒触发一次。以前我使用服务等试图让这个工作。新的FusedLocationProvider非常简单(一旦找到工作代码)。我希望上面的内容有助于其他人。