Android活动识别 - 在断开连接后重新连接

时间:2013-10-07 13:11:38

标签: android google-play-services activity-recognition

通过Google Play服务的活动识别,他们建议如果服务断开连接(可能会断开连接),那么我们应该删除客户端:

http://developer.android.com/training/location/activity-recognition.html

  

在某些情况下,位置服务可能会与活动断开连接   在调用disconnect()之前识别客户端。处理这个问题   情况,实现onDisconnected()。在此方法中,设置请求   标志,表示请求未在进行中,并删除   客户端

没关系,但没有说明如何重新连接[安全]。我是从前台服务运行的,它需要始终保持活动识别,因此断开连接后:

@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登录的错误?

1 个答案:

答案 0 :(得分:1)

这对我有用:

请勿尝试重新连接onDisconnect(),而不是在onDisconnect()

中执行任何操作
public void onDisconnected() {
 //do nothing here  
}

只需像以前一样使用客户端,但检查是否已连接

if (!mRecognitionClient.isConnected()) {
    // Client is disconnected, reconnect now
    mRecognitionClient.connect();
}

PlayServices似乎很好地重新连接。