5

私はこのonConnectedコールバックを実装していGoogle LocationClient APIます:

@Override
public void onConnected(Bundle arg0) {
    if (lc != null) {
        lastKnownLocation = lc.getLastLocation();
        LocationRequest request = new LocationRequest();
        request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        request.setFastestInterval(MIN_TIME_BETWEEN_LOCATION_UPDATES);
        request.setSmallestDisplacement(MIN_DISTANCE_BETWEEN_LOCATION_UPDATES);
        lc.requestLocationUpdates(request, ll);
    }
}

そして、何らかの理由で、時々この行:

lastKnownLocation = lc.getLastLocation();

私にこの例外を与えます:

java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called.
   at com.google.android.gms.internal.de.bc()
   at com.google.android.gms.internal.ez.a()
   at com.google.android.gms.internal.ez$c.bc()
   at com.google.android.gms.internal.ey.getLastLocation()
   at com.google.android.gms.internal.ez.getLastLocation()
   at com.google.android.gms.location.LocationClient.getLastLocation()
   at com.citylifeapps.cups.helputils.UserLocation.onConnected(UserLocation.java:115)
   at com.google.android.gms.internal.de.aZ()
   at com.google.android.gms.internal.de$f.a()
   at com.google.android.gms.internal.de$f.a()
   at com.google.android.gms.internal.de$b.be()
   at com.google.android.gms.internal.de$a.handleMessage()
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:157)
   at android.app.ActivityThread.main(ActivityThread.java:5356)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:515)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
   at dalvik.system.NativeStart.main(NativeStart.java)

なぜこれが起こるのか本当に理解できません。LocationClient明らかに、接続メソッドを実行してコールバックを待った後に最後の既知の場所を取得しようとしています。接続があるとコールバックが呼び出されるonConnectedことを理解しているので、どうすれば例外を取得できますか? 誰か知ってる?onConnected"Not connected ..."

ありがとう。

4

4 に答える 4

0

私はこれを試しました:

@Override
public void onConnected(Bundle arg0) {
    Log.w(TAG, "onConnected");
    if (!mLocationClient.isConnecting()) {
        mLocationClient.getLastLocation();
    }
}

これまでのところ、私にとってはうまく機能していますが、その理由はまったくわかりません。

于 2014-06-25T15:59:14.590 に答える
0

Samsung S4 と S3 mini でも同じ問題があります。

try/catch getLastLocation() でラップして、requirstLocationUpdate から実際の位置を取得し始めます。

@Override
public void onConnected(Bundle arg0) {
    if (lc != null) {
        try{   
           lastKnownLocation = lc.getLastLocation();
        catch(Exception ex){ /* log error */ }

        LocationRequest request = new LocationRequest();
        request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        request.setFastestInterval(MIN_TIME_BETWEEN_LOCATION_UPDATES);
        request.setSmallestDisplacement(MIN_DISTANCE_BETWEEN_LOCATION_UPDATES);
        lc.requestLocationUpdates(request, ll);
    }
}
于 2014-04-30T17:05:48.847 に答える
0

パーティーには少し遅れましたが、誰かがこの問題に遭遇した場合に備えて. 私の場合、Emil と同じエラー メッセージが表示されました。いくつかのデバッグの後、(私の特定のコードで) mLocationClient.connect() を 2 回呼び出したことに気付きました。100 ミリ秒。最初の呼び出しで onConnect() コールバックがトリガーされたと思いますが、2 回目の connect() 呼び出しで接続が切断されました。

私の場合の解決策は、接続前にまだ接続がないかどうかを確認することでした.Extended Rangeが上記で示唆しているように。Google が connect() 呼び出しを繰り返して mLocationClient を切断する理由はわかりませんが、私の場合は問題が解決しました。

if (!mLocationClient.isConnected() && !mLocationClient.isConnecting()){
    mLocationClient.connect();
}
于 2014-11-11T20:17:25.520 に答える