【发布时间】:2013-05-29 22:05:08
【问题描述】:
我的应用旨在定期跟踪用户的位置并将其发送到服务器,最近我使用 Google play services Location API 更改了我的代码。
我创建了 locationclient 并连接到 onStartCommand 中的服务
public int onStartCommand(Intent intent, int flags, int startId) {
setUpLocationClientIfNeeded();
if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())
mLocationClient.connect();
return START_STICKY;
}
在 onConnected 方法中,我发送一个位置请求,
@Override
public void onConnected(Bundle arg0) {
System.out.println("Connected ...");
mLocationClient.requestLocationUpdates(REQUEST, this);
}
REQUEST 对象是,
private static final LocationRequest REQUEST = LocationRequest.create()
.setInterval(5*60*1000) // 5 minutes
.setFastestInterval(3*60*1000) // 3 minutes
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
现在的问题是,
- onLocationChanged 方法没有在给定的时间间隔(即 5 分钟或最快的时间间隔 3 分钟)被调用。从我可以看到的日志中,它只被调用了两次或三次,之后它根本没有被调用(我在 1 小时后检查了)。
我上面的代码有什么问题? (我也看不到任何“断开连接”的日志)
- 为了解决这个问题,我尝试使用alarmmanager 定期调用任务。现在如何通过 Locationclient 从广播接收器获取单个位置更新。 (locationclient.getLastlocation() 仅返回最后存储的位置,但它不请求新位置)
【问题讨论】:
-
我遇到了一个非常相似的问题。我已经完成了一个快速而肮脏的服务,它使用 AlarmManager 定期运行,我每次都调用 getLastLocation。该调用显然返回了一个位置,但这个位置永远不会更新。我发现打开谷歌地图应用程序(可能与其他位置感知应用程序一起使用)突然使我的服务更新接收到的位置正常。知道会发生什么吗?
-
getlastlocation 总是使用被动提供者而不是 GPS 或网络提供者,这意味着只有当任何其他应用程序(如谷歌地图)获得最近的位置时,我们的应用程序才会被动地使用相同的位置
-
您是只想在应用运行时跟踪用户位置还是在后台运行时跟踪用户位置?
-
要获得一个新的位置更新,您创建一个 setNumUpdates 为 1 的位置请求,按照:developer.android.com/reference/com/google/android/gms/location/… 但如果您由于某种原因根本没有得到“回调”,那可能不是很有用。
-
您是否检查过您的服务是否还活着并且没有被破坏?
标签: android location android-service google-play-services