3

GooglePlayServicesClient.ConnectionCallbacks文档中,应在 LocationClient 断开连接时调用 onDisconnected。从我的测试中我注意到,如果我自己断开 LocationClient,它永远不会被调用。

这是我拥有的最基本的示例代码。

public class MainActivity extends ActionBarActivity implements GooglePlayServicesClient.ConnectionCallbacks,
                                                               GooglePlayServicesClient.OnConnectionFailedListener {

  private LocationClient locationClient;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    locationClient = new LocationClient(getApplicationContext(), this, this);
    locationClient.connect();
  }

  @Override
  public void onConnected(Bundle bundle) {
    Log.d("APP", "Location Client Connected");
    locationClient.disconnect();
    Log.d("APP", "Client is connected " + locationClient.isConnected());
  }

  @Override
  public void onDisconnected() {
    Log.d("APP", "Location Client Disconnected");
  }

  @Override
  public void onConnectionFailed(ConnectionResult connectionResult) {
    Log.d("APP", "Location Client connect failed");
  }
}

我收到了 onConnected() 回调,但从未收到 onDisconnected() 回调。在我打印出客户端连接状态的 onConnected 回调中,它正确打印出“false”。

我是否误解了某些东西,或者 onDisconnected 回调仅由外部事件调用,例如:

  • 活动/服务关闭
  • 位置客户端变得不可用
4

1 回答 1

2

我遇到了同样的问题,并在这里找到了答案:

我想这有点晚了,但我也想知道,所以我会回复。

这是正常行为。从 API 文档中并不清楚,但在http://developer.android.com/training/location/retrieve-current.html的官方教程中,它说 onDisconnected:

如果与位置客户端的连接由于错误而断开,则由位置服务调用。

这意味着如果您自己调用 disconnect() ,则不应调用它。

于 2014-12-26T09:06:21.987 回答