使用Google Play服务的活动识别功能,他们建议如果服务断开连接(可能会(,那么我们应该删除客户端:
http://developer.android.com/training/location/activity-recognition.html
在某些情况下,定位服务可能会断开与活动的连接 在调用 Disconnect(( 之前识别客户端。要处理这个问题 情况,实现 on断开连接((。在此方法中,设置请求 标志以指示请求未进行中,并删除 客户
这很好,但它没有给出如何[安全地]重新连接的说明。我从需要始终保持活动识别的前台服务运行它,因此在断开连接后:
@Override
public void onDisconnected() {
mRecognitionEnabled = false;
mRequestInProgress = false;
mRecognitionClient = null;
//Re-initialise Activity Recognition if service is still running
if (sServiceRunning) {
triggerActivityRecognition();
}
}
我重新实例化客户端并重新连接:
private void triggerActivityRecognition() {
if (!mRequestInProgress ) {
mRequestInProgress = true;
mRecognitionClient = new ActivityRecognitionClient(this, this, this);
mRecognitionClient.connect();
}
}
但是根据我收到的一些错误报告,发生了以下异常:
java.lang.NullPointerException
at com.google.android.gms.internal.bh.a(Unknown Source)
at com.google.android.gms.internal.k.f(Unknown Source)
at com.google.android.gms.internal.k$e.onServiceConnected(Unknown Source)
at com.google.android.gms.internal.l.a(Unknown Source)
at com.google.android.gms.internal.k.connect(Unknown Source)
at com.google.android.gms.location.ActivityRecognitionClient.connect(Unknown Source)
at com.myapp.MyService.triggerActivityRecognition(MyService.java:316)
at com.myapp.MyService.onDisconnected(MyService.java:407)
at com.google.android.gms.internal.k.A(Unknown Source)
at com.google.android.gms.internal.k$e.onServiceDisconnected(Unknown Source)
at com.google.android.gms.internal.l$a$a.onServiceDisconnected(Unknown Source)
断开连接很少发生,但每次都会导致相同的堆栈跟踪。
因此,如果这是由Google Play服务引起的,我是否可以采取任何措施来防止它,或者这是我需要使用Android登录的错误?
这是对我有用的:
不要尝试使用 onDisconnect(( 重新连接,而是在 onDisconnect(( 中什么都不做
public void onDisconnected() {
//do nothing here
}
只需像以前一样使用客户端,但检查是否已连接
if (!mRecognitionClient.isConnected()) {
// Client is disconnected, reconnect now
mRecognitionClient.connect();
}
PlayServices似乎重新连接得很好。