在我的应用程序中,我正在尝试使用基于Google的教程“检索当前位置”(http://developer.android.com/training/location/retrieve-current.html)的LocationService。 不幸的是,当我真正需要它时,我得到一个'IllegalStateException:未连接。调用connect()并等待onConnected'异常。 我需要定位服务很短的时间 - 按下 一些按钮我想获得当前位置(或最后的已知位置)。 我的LocationHandler代码如下:
class LocationHandler implements GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
private MainActivity m_ma;
private LocationClient m_locationClient;
private boolean m_isAvailable = false;
//ctor
LocationHandler(MainActivity ma) {
m_ma = ma;
m_locationClient = new LocationClient(ma, this, this);
}
@Override
public void onConnected(Bundle dataBundle) {
// Display the connection status
Toast.makeText(m_ma, "Connected", Toast.LENGTH_SHORT).show();
m_isAvailable = true;
Log.i(TAG, "LOCATION = " + m_locationClient.getLastLocation());
}
@Override
public void onDisconnected() {
// Display the connection status
Toast.makeText(m_ma, "Disconnected."
Toast.LENGTH_SHORT).show();
m_isAvailable = false;
Log.i(TAG, "LOCATION dis-connected");
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
m_isAvailable = false;
Log.i(TAG, "LOCATION failed");
... code from tutorial
}
//connect the LocationClient
void connectLocationClient() {
m_locationClient.connect();
}
//disconnect the LocationClient
void diconnectLocationClient() {
m_locationClient.disconnect();
}
//
Location getCurrentLocation() {
connectLocationClient();
if(m_isAvailable) {
Log.i(TAG, "3333333333333333 m_locationClient.isConnected() = " + m_locationClient.isConnected());
return m_locationClient.getLastLocation();
} else {
Log.i(TAG, "444444444444");
Toast.makeText(m_ma, "Location Services is not yet avaialable",
Toast.LENGTH_SHORT).show();
return null;
}
}
}
按钮的onClick代码调用getCurrentLocation()
方法。
在第一次点击时,我显然得到一个空位置和“...尚未可用”Toast。
然后调用onConnected(..)
回调,并在其中getLastLocation()
成功。
然后,当我再次按下按钮时,我从LocationClient获得IllegalStateException
没有连接。
如果我已经看到onConnected()
被调用,但没有看到onDisconnected()
和onConnectionFailed(..)
被调用,怎么会没有连接?