private async void OnClickCheckSetting(object sender, EventArgs eventArgs) { string Tag = "CheckSetting"; LocationRequest locationRequest = new LocationRequest(); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); builder.AddLocationRequest(locationRequest) .SetAlwaysShow(false) .SetNeedBle(false); var locationSettingsResponseTask = settingsClient.CheckLocationSettingsAsync(builder.Build()); try { await locationSettingsResponseTask; if (locationSettingsResponseTask.IsCompleted && locationSettingsResponseTask.Result != null) { LocationSettingsResponse response = locationSettingsResponseTask.Result; LocationSettingsStates locationSettingsStates = response.LocationSettingsStates; log.Info(Tag, $"CheckLocationSettings completed: {locationSettingsStates.LSSToString()}"); } } catch (Exception e) { if (e is ApiException apiException) { log.Error(Tag, $"CheckLocationSetting Failed. ErrorMessage: {apiException.Message} ErrorCode: {apiException.StatusCode}"); int statuesCode = apiException.StatusCode; if (statuesCode == LocationSettingsStatusCodes.ResolutionRequired) { try { //When the StartResolutionForResult is invoked, a dialog box is displayed, asking you to open the corresponding permission. ResolvableApiException resolvableApiException = (ResolvableApiException)e; resolvableApiException.StartResolutionForResult(this, 0); } catch (IntentSender.SendIntentException sendIntentException) { log.Error(Tag, "PendingIntent unable to execute request."); } } } else { log.Error(Tag, $"CheckLocationSetting Failed: {e.Message}"); } } }
private async void OnClickRequestLocationUpdates(object sender, EventArgs eventArgs) { string Tag = "RequestLocationUpdates"; LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder(); builder.AddLocationRequest(locationRequest); LocationSettingsRequest request = builder.Build(); //Before requesting location update, invoke CheckLocationSettings to check device settings. var locationSettingsResponseTask = settingsClient.CheckLocationSettingsAsync(request); try { await locationSettingsResponseTask; if (locationSettingsResponseTask.IsCompleted && locationSettingsResponseTask != null) { LocationSettingsResponse response = locationSettingsResponseTask.Result; var requestLocationUpdatesTask = fusedLocationProviderClient.RequestLocationUpdatesAsync(locationRequest, locationCallback, Looper.MainLooper); try { await requestLocationUpdatesTask; if (requestLocationUpdatesTask.IsCompleted) { log.Info(Tag, "RequestLocationUpdates with callback succeeded."); } else { log.Error(Tag, $"RequestLocationUpdates with callback failed: {requestLocationUpdatesTask.Exception.Message}"); } } catch (Exception e) { log.Error(Tag, $"RequestLocationUpdates with callback failed: {e.Message}"); } } else { var exception = locationSettingsResponseTask.Exception; log.Error(Tag, $"CheckLocationSetting Failed: {exception.Message}"); } } catch (Exception e) { if (e is ApiException apiException) { log.Error(Tag, $"CheckLocationSetting Failed. ErrorMessage: {apiException.Message} ErrorCode: {apiException.StatusCode}"); int statuesCode = apiException.StatusCode; if (statuesCode == LocationSettingsStatusCodes.ResolutionRequired) { try { //When the StartResolutionForResult is invoked, a dialog box is displayed, asking you to open the corresponding permission. ResolvableApiException resolvableApiException = (ResolvableApiException)e; resolvableApiException.StartResolutionForResult(this, 0); } catch (IntentSender.SendIntentException sendIntentException) { log.Error(Tag, "PendingIntent unable to execute request."); } } } else { log.Error(Tag, $"CheckLocationSetting Failed: {e.Message}"); } } }
private async Task CheckLocationEnabled() { try { LocationRequest highAccuracyRequest = LocationRequest.Create() .SetPriority(LocationRequest.PriorityHighAccuracy) .SetInterval(HIGH_ACC_INTERVAL_IN_MILLISECONDS) .SetFastestInterval(FASTEST_HIGH_ACC_UPDATE_INTERVAL); LocationRequest balancedRequest = LocationRequest.Create() .SetPriority(LocationRequest.PriorityBalancedPowerAccuracy) .SetInterval(BAL_ACC_INTERVAL_IN_MILLISECONDS) .SetFastestInterval(FASTEST_BAL_ACC_UPDATE_INTERVAL); LocationSettingsRequest.Builder locationSettingsRequestBuilder = new LocationSettingsRequest.Builder() .AddLocationRequest(highAccuracyRequest) .AddLocationRequest(balancedRequest) .SetAlwaysShow(true); LocationSettingsResponse locationSettingsResult = await LocationServices.GetSettingsClient(this) .CheckLocationSettingsAsync(locationSettingsRequestBuilder.Build()); if (locationSettingsResult.LocationSettingsStates.IsLocationPresent && locationSettingsResult.LocationSettingsStates.IsLocationUsable) { IsLocationEnabled = true; } else { IsLocationEnabled = false; } } catch (ApiException exception) { if (exception.StatusCode != CommonStatusCodes.ResolutionRequired) { if (exception.StatusCode == LocationSettingsStatusCodes.SettingsChangeUnavailable) { // GetLocationPermissions(Manifest.Permission.AccessFineLocation); } } else { // Location settings are not satisfied. But could be fixed by showing the // user a dialog. try { var resolvable = exception as ResolvableApiException; resolvable?.StartResolutionForResult(this, REQUEST_TURN_ON_LOCATION_ID); } catch (Exception) { // ignored } } } catch (Exception e) { // Crashlytics.Crashlytics.LogException(Throwable.FromException(e)); } }