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}");
                }
            }
        }
예제 #2
0
        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}");
                }
            }
        }
예제 #3
0
        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));
            }
        }