2013-10-07 28 views
0

与谷歌播放服务活动的认可,他们建议,如果该服务断开(它可能),那么我们就应该删除客户端:Android的行为识别 - 重新连接之后断开

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

+0

好的,所以我认为问题在于我试图从onDisconnect()的范围内重新连接,这导致了问题。 也没有意识到客户端不需要保持连接的更新,以继续收到。 – warbi

回答

1

这对我来说是什么在起作用:

不要使用与以前onDisconnect()尝试重新连接,而不是什么都不做的onDisconnect()

public void onDisconnected() { 
//do nothing here 
} 

只需使用客户端,但检查是否已连接

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

PlayServices似乎很好地重新连接。

+0

我同意。我想我误解了认证客户的目的;它不需要保持连接以便通过发送识别更新。谢谢。 – warbi

相关问题