虽然onConnected被调用,但LocationClient未连接

时间:2014-09-13 19:45:33

标签: android geolocation google-play-services

在我的应用程序中,我正在尝试使用基于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(..)被调用,怎么会没有连接?

0 个答案:

没有答案