【问题标题】:Android Activity Recognition - Reconnecting following DisconnectionAndroid 活动识别 - 断开连接后重新连接
【发布时间】:2013-10-07 13:11:37
【问题描述】:

借助 Google Play 服务的 Activity Recognition,他们建议如果服务断开连接(它可能会断开连接),那么我们应该删除客户端:

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

【问题讨论】:

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

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


【解决方案1】:

这对我有用:

不要尝试使用 onDisconnect() 重新连接,而是在 onDisconnect() 中不执行任何操作

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

和以前一样简单使用客户端,但检查是否连接

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

PlayServices 似乎可以很好地重新连接。

【讨论】:

  • 我同意。我想我误解了认可客户的目的;它不需要保持连接即可发送识别更新。谢谢。
猜你喜欢
  • 2012-08-07
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多