不会调用Android LocationClient onDisconnect

时间:2014-10-04 22:36:44

标签: android location connect location-client

当LocationClient断开连接时,应该调用on GooglePlayServicesClient.ConnectionCallbacks文档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回调,例如:

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

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并找到了答案here

  

我觉得有点晚了,但我想知道同样的事情,所以我会回复。

     

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

     
    

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

  
     

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