2016-11-07 7 views
0

私は場所の有効化ダイアログを表示している状況があります。ユーザーが一度それを拒否した場合は、メソッドを繰り返し呼び出すstartResolutionForResult()Android、一度拒否した場合に再び位置指定可能なダイアログを表示する方法

PS:ダイアログでneverを選択するオプションが表示されないので、毎回ダイアログが表示されます。

ご協力いただければ幸いです。

+0

私のコードはこれまで通りうまく動作しています。ダイアログには有効な場所が表示されますが、一度ユーザーがそれを拒否すれば、同じコードを使用して場所を表示しようとすると再び表示されます。ダイアログはポップアップしません。同じ汎用コード。私はここで同じコードが必要とは思わない。 – DisplayName

答えて

0

私は次のルーチンを使用して位置設定ダイアログを要求しています。これは期待どおりに動作しています。つまり、ユーザーがそれを拒否した場合(Not Nowをタップして)、要求された場合に再びポップアップします。

protected void createLocationRequest() { 
    mLocationRequest = new LocationRequest(); 

    mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); 

    mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); 

    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 


    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); 
    builder.addLocationRequest(mLocationRequest); 
    mLocationSettingsRequest = builder.build(); 

    PendingResult<LocationSettingsResult> result = 
      LocationServices.SettingsApi.checkLocationSettings(
        mGoogleApiClient, 
        mLocationSettingsRequest); 
    result.setResultCallback(this); 
} 
@Override 
public void onResult(@NonNull LocationSettingsResult locationSettingsResult) { 
    final Status status = locationSettingsResult.getStatus(); 
    switch (status.getStatusCode()) { 
     case LocationSettingsStatusCodes.SUCCESS: 
      Log.i(TAG, "All location settings are satisfied."); 
      startLocationUpdates(); 
      break; 
     case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
      Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" + 
        "upgrade location settings "); 
      try { 
       status.startResolutionForResult(HostActivity.this, REQUEST_CHECK_SETTINGS); 
      } catch (IntentSender.SendIntentException e) { 
       Log.i(TAG, "PendingIntent unable to execute request."); 
      } 
      break; 
     case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
      Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + 
        "not created."); 
      break; 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case REQUEST_CHECK_SETTINGS: 
      switch (resultCode) { 
       case Activity.RESULT_OK: 
        Log.i(TAG, "User agreed to make required location settings changes."); 
        Util.toast(HostActivity.this, R.string.requesting_location_data); 
        startLocationUpdates(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Log.i(TAG, "User chose not to make required location settings changes."); 
        break; 
      } 
      break; 
     default: 
      super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

このコードを使用すると、同じことを達成できると思います。

ActivityまたはFragmentにはResultCallback<LocationSettingsResult>を実装する必要があります。

+0

それはAndroid Marshmallowでもうまく機能していますか? – DisplayName

+0

@DisplayNameはい、私はそれをテストし、それが動作します。 –

関連する問題