2016-09-25 13 views
0

で位置情報の更新を停止することができません。私は次のようにそれを試しました:こんにちは、私は私が融合した位置情報の更新を使用して位置情報の更新を取得しようとしていた中小規模のAndroidアプリケーションを開発しています溶融ロケーションAPIを

private void processStartLocation() { 
    mGoogleApiClient.connect(); 
} 

@Override 
public void onConnected(Bundle bundle) { 

    updateBooleanSharedPreference(this, "isLocationUpdatesOn", true); 
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationPendingIntent); 

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); 
    if (mLastLocation != null) { 
     lat = String.valueOf(mLastLocation.getLatitude()); 
     lon = String.valueOf(mLastLocation.getLongitude()); 
     time = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS").format(new Date(mLastLocation.getTime())); 
     updateUI(); 
    } 
} 

private void processStopLocation() { 

    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, locationPendingIntent); 
} 

これですべてうまくいきます。私は更新を受け取ることができます。

java.lang.IllegalStateException: GoogleApiClient is not connected yet. 
at com.google.android.gms.internal.zzlh.zzb(Unknown Source) 
at com.google.android.gms.internal.zzli.zzb(Unknown Source) 
at com.google.android.gms.location.internal.zzd.removeLocationUpdates(Unknown Source) 

は私が間違って何をやっている:私は更新を停止しようとすると、しかし、私は、次の問題を得ました。助けが要る。ありがとうございました。

+0

ポイントをピンするのは難しいと呼ばれているの?知らず – ishmaelMakitla

+0

私はprocessStopLocationと呼ばれるいくつかの時間後に、その後のonConnect内で、最初のアップデートを開始してみました。 – nilkash

+0

更新をキャンセルする前に少なくとも場所の更新を取得していますか?あなたのコードに 'onLocationChanged'コールバックを実装しましたが、これはあなたの更新を入手する場所ですか? – ishmaelMakitla

答えて

1

GoogleApiClientが接続されていないため、指定された保留中の意図(locationPendingIntent)のために、すべての場所の更新を削除する方法について、エラーの苦情ことを見て - おそらくあなたが呼び出しを行う前に、その接続状態を確認する必要があります。

private void processStopLocation() { 
    if(mGoogleApiClient !=null){ 
     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    } 
    else{ 
    //no need to stop updates - we are no longer connected to location service anyway 
    } 
} 
+0

私は上記の解決策を試しました。しかし、単に場所の更新を停止するプロセスをバイパスしているだけです。バックグラウンドでは、私はまだ更新を受けています。 – nilkash

+0

あなたのサービス/アクティビティは 'LocationListener'を実装しています。 locationPendingIntentの代わりにリスナーを渡して位置の更新を止めてみてください。更新された回答をご覧ください。 – ishmaelMakitla

+0

はいリスナーを渡して、その値をnullに設定してコールバックを停止できるようにしてください – Priya

0

ができませんどこか見るあなたはprocessStopLocationを呼び出している()が、その誤差は、一般的に接続されているGoogleのAPIクライアントオブジェクトへの参照を失った()processStopLocationで使用されるあなたの「mGoogleApiClient」オブジェクトを意味する場合。たぶんprocessStopLocationにおけるGoogleのAPIクライアントprocessStartLocation内のオブジェクト()とゲッターのためのセッターは()仕事ができます。ここでも正確にいつ更新開始処理とするとき停止処理は、それはあなたが `processStopLocation()`を呼び出すんどこときに/問題

+0

こんにちはVikrantさん、リプレイに感謝します。 mGoogleAPiClientリファレンスを維持する方法はありますか?いずれかの場所に保管しておくか、接続オブジェクト参照を取得することができます。私はバックグラウンドからアプリケーションを終了し、再度起動すると同じ問題に直面しています。その後、バックグラウンドで実行しているサービスを停止するために再試行します。また、私はmGoogleApiClientを渡す必要があります – nilkash

+0

私はオブジェクトのset()とget()メソッドを使用すると言ったように。それはあなたを並べ替える必要があります – badrobot15

+0

processStartLocation()を呼び出すために使用されたオブジェクトとは対照的に、クラスの新しいオブジェクトを使用して外部クラスまたはサービスからprocessStopLocation()を呼び出す場合、失われています。どちらの方法でも、別のクラスを介してオブジェクトに対してgetおよびsetを使用すると、参照が確実に維持されます。 – badrobot15

関連する問題