Я пользуюсь сервисами Google Play. Для моего приложения местоположение является ключевым компонентом. Когда GPS
выключен, я использую LocationSettingsClient
, чтобы показать пользователю диалог для его включения. Проблема в том, что после нажатия OK
на некоторых устройствах снова появляется диалоговое окно.
Вот мой код для отображения настроек местоположения:
onResume
override fun onResume() {
super.onResume()
Log.v(TAG, "onResume")
this.startLocationUpdates(UPDATE_INTERVAL_IN_MILLISECONDS, UPDATE_DISTANCE_THRESHOLD)
}
private fun startLocationUpdates(interval: Long, distance: Float = 0f) {
if (!mSettingsClientInit)
return
createLocationRequest(interval, distance)
createLocationCallback()
// Begin by checking if the device has the necessary location settings.
mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
.addOnSuccessListener(this, object : OnSuccessListener<LocationSettingsResponse> {
override fun onSuccess(locationSettingsResponse: LocationSettingsResponse) {
Log.i(TAG, "LocationManager: All location settings are satisfied.");
mLocationCallback?.let {
fusedLocationClient?.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());
}
// updateUI();
}
})
.addOnFailureListener(this, object : OnFailureListener {
override fun onFailure(e: Exception) {
Log.i(TAG, "Request PErmission failure");
var statusCode = (e as ApiException).getStatusCode()
when (statusCode) {
LocationSettingsStatusCodes.RESOLUTION_REQUIRED -> {
try {
// Show the dialog by calling startResolutionForResult(), and check the
// result in onActivityResult().
var rae = e as ResolvableApiException;
rae.startResolutionForResult(this@BaseLocationActivity, REQUEST_CHECK_SETTINGS);
} catch (sie: IntentSender.SendIntentException) {
Log.i(TAG, "PendingIntent unable to execute request.");
}
}
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {
mRequestingLocationUpdates = false;
}
}
}
}
)
}
Может кто-нибудь указать, почему на некоторых устройствах снова и снова появляется диалоговое окно LocationSettings
, а не на всех устройствах?