Я использую LocationServices
в моем приложении. Прежде чем использовать службы определения местоположения, я пытаюсь проверить, включено ли расположение с необходимыми настройками, но проблема, с которой я сталкиваюсь, заключается в том, что SettingsClient.checkSettings
всегда failing
. Пожалуйста, посмотрите мой LocationRequest
и LocationSettingRequest
строитель:
LocationRequest
mLocationRequest = LocationRequest()
mLocationRequest.interval = interval
mLocationRequest.fastestInterval = interval
Log.v(TAG, "distance => $distance")
if(distance > 0) {
mLocationRequest.smallestDisplacement = distance
}
mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
buildLocationSettingsRequest()
LocationSettingRequestBuilder
private fun buildLocationSettingsRequest() {
val builder = LocationSettingsRequest.Builder()
builder.addLocationRequest(mLocationRequest)
mLocationSettingsRequest = builder.build()
mSettingsClientInit = true
}
И я запрашиваю checkSettings
как
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.v(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.v(TAG, "PendingIntent unable to execute request.");
}
}
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE -> {
mRequestingLocationUpdates = false;
Log.v(TAG, "Settings change unavailable.");
}
}
}
}
)
Это всегда приводит к onFailure
из addOnFailureListener
. Может кто-нибудь, пожалуйста, помогите мне, в чем может быть проблема? Это диалоговое окно настроек показывает OK, чтобы включить настройки, я нажимаю ОК, снова появляется тот же диалог с обратным вызовом onFailure.
Это происходит на некоторых устройствах, а не на всех устройствах.