【发布时间】:2015-11-26 08:49:22
【问题描述】:
目标:每分钟记录一次用户的位置。
尝试 1: Google 位置服务 API
我发现这种方法给出的结果不准确。我会离开一个位置,而不是说我离家很远,而是说我离家大约 10 米。有时它会在 10 分钟左右后自行纠正,有时需要 3 小时或更长时间。
public class timesheetService extends Service implements
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener {
private static GoogleApiClient mGoogleApiClient;
private static LocationRequest mLocationRequest;
private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
private void locationSetup(){
int interval = 120000;
// Create the LocationRequest object
mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(interval) // 2 mins, in milliseconds
.setFastestInterval(10000); // 1 second, in milliseconds
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
}
@Override
public void onConnected(Bundle bundle) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
}
private void handleNewLocation(Location location) {
Log.i("location", String.valueOf(location));
}
可以在我未回答的问题中找到更多详细信息:Does Google Location Services return old locations?
尝试 2: 内置位置 API
此方法完美运行,但新设备上的主要错误除外,即在设备重新启动之前不监听位置更改。如此处所述:https://code.google.com/p/android/issues/detail?id=57707
private LocationManager locationManager;
public void getLocation2() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
60 * 1000,//seconds * milliseconds
0, // distance (meters)
LListener);
}
android.location.LocationListener LListener = new android.location.LocationListener(){
@Override
public void onLocationChanged(Location location) {
Log.i("classic", String.valueOf(location));
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.i("status", String.valueOf(status));
}
};
那么人们是怎么做到的呢?我知道这一定是可能的,但我已经被这个问题困扰了好几个星期,我不明白为什么这两种方法都不能正常工作。
【问题讨论】:
-
我使用了融合和原生位置 api。两者都工作正常。吃了你确定你遵循了这个文档developer.android.com/training/location/… 的每一步吗?例如你应该在 api 客户端的 onConnected() 中 requestLocationUpdates()。
-
我已经发布了所有适用的代码,如果你有什么特别之处,请告诉我。据我所知,它与教程没有什么不同,因为我基本上将它复制到其中。
标签: android geolocation