2016-07-01 12 views
1

FusedLocationには、ユーザーが関連する設定をすべて有効にしているかどうかを確認する素晴らしいAPIがあります。私は文書https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApiにしたがってSettingsApiを起動しました。ユーザーの設定を確認するコードは次のとおりですAndroid FusedLocationのSettingsApiが複数回機能しない

このコードは初めて完全に正常に動作します。その後、PendingResultコールバックは決して動作しませんでした。私はlogcatでもログを見つけることができませんでした。私の場合、実装の問題のように見えます。

問題を再現する方法は次のとおりです。

GPSの電源を切ってください。メソッドを呼び出すと、正常に動作します。私はGPSを切り替えるように頼んでいます。位置の更新を受け取ったら、GPSをもう一度オフにしてこのメ​​ソッドを呼び出します。 GPSを有効にするためのダイアログが表示されることはありません。このメソッドをボタンのクリックで呼び出すと、ユーザーの最新の場所を取得しようとします。

EDIT: 私はPendingResult結果をクラス変数として宣言しようとしました。まだ運がありません。私はまた、期待通りにnullであるかどうかをチェックすることで結果を1回だけ初期化しようとしました。また、Googleのドキュメントに記載されているように、結果がすでに消費されているという例外がスローされます。

+0

、そしてどのバージョンテスト中にGoogle Playサービスをインストールしたことがありますか? –

+0

私のデバイスで私はGoogleプレイサービス9.2.56を持っていて、私のアプリでは9.0.2を使用しています。 –

+0

@DanielNugent今、最新の9.2.0バージョンを使用するようにアプリケーションを更新しようとしました。まだ同じ問題 –

答えて

1

nullの場合にのみ再作成するので、毎回LocationSettingsRequest.Builderを再作成しないという問題があるようです。

Android 4.4.4と6.0.1の両方で動作確認済みです。

ダイアログが(場所がボタンを押す間のデバイス上で無効にされたこと提供)ボタンを押すたびに表示され

サービスがアプリで使用しているのGoogle Playのバージョンは何
public void checkLocationSetting() { 
    mLocationRequest = LocationRequest.create(); 
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mLocationRequest.setInterval(30 * 1000); 
    mLocationRequest.setFastestInterval(5 * 1000); 

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
      .addLocationRequest(mLocationRequest); 
    builder.setAlwaysShow(true); 

    result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); 

    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
     @Override 
     public void onResult(LocationSettingsResult result) { 
      final Status status = result.getStatus(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        // All location settings are satisfied. The client can initialize location 
        // requests here. 
        //... 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        // Location settings are not satisfied. But could be fixed by showing the user 
        // a dialog. 
        try { 
         // Show the dialog by calling startResolutionForResult(), 
         // and check the result in onActivityResult(). 
         status.startResolutionForResult(
           MainActivity.this, 
           REQUEST_LOCATION); 
        } catch (IntentSender.SendIntentException e) { 
         // Ignore the error. 
        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        // Location settings are not satisfied. However, we have no way to fix the 
        // settings so we won't show the dialog. 
        //... 
        break; 
      } 
     } 
    }); 

} 
+0

毎回Builderを初期化しようとしました。それでも、私はこの事を2回目にすることができません。実際に私は3つの異なるデバイスを試しました。すべて3と同じ結果でした。私はまた、mLocationRequestを再初期しようとしました。どちらもうまくいきませんでした。 –

+0

私のビジネスロジックなしで別の簡単なアクティビティを作成した後、問題点を指摘できました。私のonLocationChanged()のstopLocationUpdates。 mGoogleApiClientが切断されます。mGoogleApiClientが接続されていない場合、これは機能しません。ここに私の要点ですhttps://gist.github.com/rakesh1988/03cd9f909542f7b078c921093ef9ade9 –

関連する問題