private void BuildLocationSettingsRequest()
 {
     //get the current location settings of a user's device
     LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
     builder.AddLocationRequest(mLocationRequest);
     mLocationSettingsRequest = builder.Build();
 }
Beispiel #2
0
        public static async Task <bool> CheckForAndTurnOnLocationServices(bool checkOnly = false)
        {
            //Debug.WriteLine("### DoingLocationStuff");
            if (!checkOnly)
            {
                _isLocationOnTask = new TaskCompletionSource <bool>();
            }

            try
            {
                var builder = new LocationSettingsRequest.Builder().AddLocationRequest(LocationRequest.Create())
                              .SetAlwaysShow(true);

                var response = await LocationServices.GetSettingsClient(MainActivity.Instance)
                               .CheckLocationSettingsAsync(builder.Build());

                _isLocationOnTask.SetResult(response.LocationSettingsStates.IsLocationUsable);
            }
            catch (Exception e)
            {
                if (e is ResolvableApiException exc &&
                    !checkOnly)
                {
                    exc.StartResolutionForResult(MainActivity.Instance, (int)MainActivity.RequestCodes.TurnLocationServicesOnRequestCode);
                    return(await _isLocationOnTask.Task);
                }
                Debug.WriteLine("### Location error: " + e);
                _isLocationOnTask.SetResult(false);
            }

            return(await _isLocationOnTask.Task);
        }
Beispiel #3
0
        public async void turnOnGps()
        {
            try
            {
                MainActivity activity = global::Xamarin.Forms.Forms.Context as MainActivity;

                GoogleApiClient googleApiClient = new GoogleApiClient.Builder(activity).AddApi(LocationServices.API).Build();
                googleApiClient.Connect();
                LocationRequest locationRequest = LocationRequest.Create();
                locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
                locationRequest.SetInterval(10000);
                locationRequest.SetFastestInterval(10000 / 2);

                LocationSettingsRequest.Builder
                    locationSettingsRequestBuilder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
                locationSettingsRequestBuilder.SetAlwaysShow(false);
                LocationSettingsResult locationSettingsResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
                    googleApiClient, locationSettingsRequestBuilder.Build());


                if (locationSettingsResult.Status.StatusCode == LocationSettingsStatusCodes.ResolutionRequired)
                {
                    locationSettingsResult.Status.StartResolutionForResult(activity, 0);
                }

                var result = await LocationServices.SettingsApi.CheckLocationSettingsAsync(googleApiClient, locationSettingsRequestBuilder.Build());
            }
            catch (Exception ex)
            {
            }
        }
Beispiel #4
0
        //This procedure calls
        //not sure if im calling this right.
        //1) is it OK to pass in mainactivity like this?
        //2) any way to get a callback after they enable? (ie, to reload webview)
        //3) any way to delay the initial load of the webview until they hit the OK button to load fixity?
        //https://forums.xamarin.com/discussion/118189/gps-location-enable-in-xamarin-forms
        //https://stackoverflow.com/questions/33251373/turn-on-location-services-without-navigating-to-settings-page
        //https://stackoverflow.com/questions/43138788/ask-user-to-turn-on-location/43139125
        //https://forums.xamarin.com/discussion/140325/how-to-check-every-time-for-gps-connectivity (code based on this)
        public async void turnOnGps(MainActivity activity)
        {
            try
            {
                //MainActivity activity = Xamarin.Forms.Context as MainActivity;
                GoogleApiClient googleApiClient = new GoogleApiClient.Builder(activity)
                                                  .AddApi(LocationServices.API).Build();
                googleApiClient.Connect();
                LocationRequest locationRequest = LocationRequest.Create();
                locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
                locationRequest.SetInterval(10000);
                locationRequest.SetFastestInterval(10000 / 2);

                LocationSettingsRequest.Builder
                    locationSettingsRequestBuilder = new LocationSettingsRequest.Builder()
                                                     .AddLocationRequest(locationRequest);
                locationSettingsRequestBuilder.SetAlwaysShow(false);
                LocationSettingsResult locationSettingsResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
                    googleApiClient, locationSettingsRequestBuilder.Build());

                if (locationSettingsResult.Status.StatusCode == LocationSettingsStatusCodes.ResolutionRequired)
                {
                    locationSettingsResult.Status.StartResolutionForResult(activity, 0);
                }
            }
            catch (Java.Lang.Exception ex)
            {
                Xamarin.Forms.DependencyService.Get <IMessage>().LongAlert(ex.Message); //show error
            }
        }
        protected async System.Threading.Tasks.Task CheckLocationSettings()
        {
            bool permissionLocationGranted = true;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
            {
                permissionLocationGranted = Application.Context.CheckSelfPermission(Manifest.Permission.AccessFineLocation) == (int)Permission.Granted;
                if (!permissionLocationGranted)
                {
                    OnLocationServiceError(LocationErrors.MissingPermission);
                }
            }

            if (permissionLocationGranted)
            {
                if (apiClient != null)
                {
                    //jls
                    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                    builder.AddLocationRequest(LocationRequest);
                    var mLocationSettingsRequest = builder.Build();

                    //   BuildLocationSettingsRequest();

                    var result = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
                        apiClient, mLocationSettingsRequest);
                    await HandleResult(result);
                }
            }
        }
        public void RequestLocationUpdatesWithCallback()
        {
            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
            builder.AddLocationRequest(locationRequest);
            LocationSettingsRequest locationSettingsRequest = builder.Build();

            //checking device settings
            Task locationSettingsTask = locationSettings.CheckLocationSettings(locationSettingsRequest);

            locationSettingsTask.AddOnSuccessListener(new OnCallbackSettingsSuccessListener(this, fusedLocationProviderClient, locationRequest, locationCallback)).
            AddOnFailureListener(new OnCallbackSettingsFailureListener(this));
        }
        private void RequestLocationUpdatesWithIntent()
        {
            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
            builder.AddLocationRequest(locationRequest);
            LocationSettingsRequest locationSettingsRequest = builder.Build();

            //checking device settings
            Task locationSettingsTask = settingsClient.CheckLocationSettings(locationSettingsRequest);

            pendingIntent = CreatePendingIntent();
            locationSettingsTask.AddOnSuccessListener(new OnSettingsSuccessListener(this, fusedLocationProviderClient, locationRequest, pendingIntent)).
            AddOnFailureListener(new OnSettingsFailureListener(this));
        }
        public async Task CheckAndTurnOnGPS(Page page)
        {
            this.page = page;

            Int64 interval = 1000 * 60 * 1, fastestInterval = 1000 * 50;

            try
            {
                GoogleApiClient
                    googleApiClient = new GoogleApiClient.Builder(MainActivity.Instance)
                                      .AddApi(LocationServices.API)
                                      .Build();

                googleApiClient.Connect();

                LocationRequest
                    locationRequest = LocationRequest.Create()
                                      .SetPriority(LocationRequest.PriorityBalancedPowerAccuracy)
                                      .SetInterval(interval)
                                      .SetFastestInterval(fastestInterval);

                LocationSettingsRequest.Builder
                    locationSettingsRequestBuilder = new LocationSettingsRequest.Builder()
                                                     .AddLocationRequest(locationRequest);

                locationSettingsRequestBuilder.SetAlwaysShow(false);

                LocationSettingsResult
                    locationSettingsResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
                    googleApiClient, locationSettingsRequestBuilder.Build());

                if (locationSettingsResult.Status.StatusCode == LocationSettingsStatusCodes.ResolutionRequired)
                {
                    locationSettingsResult.Status.StartResolutionForResult(MainActivity.Instance, 0);
                }
            }
            catch (Exception exception)
            {
                Console.Write(exception.Message);
            }

            /*(if ((int)Build.VERSION.SdkInt < 23)
             * {
             *  await MainActivity.Instance.GetLocationAsync();
             *  return;
             * }
             *
             * await MainActivity.Instance.GetLocationPermissionAsync(this);*/
        }
        public void StartLocationRequest()
        {
            if (activity != null)
            {
                LocationRequest request = new LocationRequest()
                                          .SetPriority(LocationRequest.PriorityHighAccuracy)
                                          .SetFastestInterval(1000)
                                          .SetInterval(10000);

                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                builder.AddLocationRequest(request);
                LocationServices.GetSettingsClient(activity).CheckLocationSettings(builder.Build());

                LocationServices.GetFusedLocationProviderClient(activity).RequestLocationUpdates(request, mCallback, Looper.MyLooper());
            }
        }
Beispiel #10
0
        public void IsLocationEnabled(Action <bool> returnAction)
        {
            InitializeGoogleAPI();
            if (mGeofenceClient == null)
            {
                returnAction(false);
                return;
            }

            var locationRequest = GetLocationRequest();

            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
            SettingsClient client = LocationServices.GetSettingsClient(Android.App.Application.Context);
            var            task   = client.CheckLocationSettingsAsync(builder.Build());

            Task.Run(() => task).ContinueWith(t => LocationSettingsCallback(t, returnAction));
        }
 private void RequestLocationUpdatesWithCallback()
 {
     try
     {
         LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
         builder.AddLocationRequest(mLocationRequest);
         LocationSettingsRequest locationSettingsRequest = builder.Build();
         // Before requesting location update, invoke checkLocationSettings to check device settings.
         Task locationSettingsResponseTask = mSettingsClient.CheckLocationSettings(locationSettingsRequest);
         locationSettingsResponseTask
         .AddOnSuccessListener(new LocCallSettOnSuccessListenerImpl(mFusedLocationProviderClient, mLocationRequest, mLocationCallback))
         .AddOnFailureListener(new LocCallSettOnFailureListenerImpl(this));
     }
     catch (Exception e)
     {
         LocationLog.Error(TAG, "requestLocationUpdatesWithCallback exception:" + e.Message);
     }
 }
Beispiel #12
0
        public async static void AskForLocation()
        {
            if (!CheckIsGPSEnabled())
            {
                Int64
                    interval        = 1000 * 60 * 1,
                    fastestInterval = 1000 * 50;

                try
                {
                    GoogleApiClient
                        googleApiClient = new GoogleApiClient.Builder(MainActivity.AndroidContext)
                                          .AddApi(LocationServices.API)
                                          .Build();

                    googleApiClient.Connect();

                    LocationRequest
                        locationRequest = LocationRequest.Create()
                                          .SetPriority(LocationRequest.PriorityBalancedPowerAccuracy)
                                          .SetInterval(interval)
                                          .SetFastestInterval(fastestInterval);

                    LocationSettingsRequest.Builder
                        locationSettingsRequestBuilder = new LocationSettingsRequest.Builder()
                                                         .AddLocationRequest(locationRequest);

                    locationSettingsRequestBuilder.SetAlwaysShow(false);

                    LocationSettingsResult
                        locationSettingsResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
                        googleApiClient, locationSettingsRequestBuilder.Build());

                    if (locationSettingsResult.Status.StatusCode == LocationSettingsStatusCodes.ResolutionRequired)
                    {
                        locationSettingsResult.Status.StartResolutionForResult(MainActivity.CurrentActivity, 0);
                    }
                }
                catch (Exception)
                {
                    // Log exception
                }
            }
        }
        public async Task <bool> TurnOnLocationSettings()
        {
            try
            {
                Cts = new TaskCompletionSource <bool>();

                var client = new GoogleApiClient.Builder(CrossCurrentActivity.Current.Activity).AddApi(LocationServices.API).Build();
                client.Connect();

                var locationRequest = LocationRequest.Create();
                locationRequest.SetPriority(LocationRequest.PriorityBalancedPowerAccuracy);
                locationRequest.SetInterval(30 * 1000);
                locationRequest.SetFastestInterval(5 * 1000);

                var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
                //builder.SetAlwaysShow(true);

                //CrossCurrentActivity.Current.ActivityStateChanged += (sender, args) =>
                //{};

                var result = await LocationServices.SettingsApi.CheckLocationSettingsAsync(client, builder.Build());

                if (result.Status.StatusCode == CommonStatusCodes.Success)
                {
                    return(true);
                }

                if (result.Status.StatusCode == CommonStatusCodes.ResolutionRequired)
                {
                    result.Status.StartResolutionForResult(CrossCurrentActivity.Current.Activity, 0x1); //REQUEST_CHECK_SETTINGS
                }
                else
                {
                    var settingIntent = new Intent(Android.Provider.Settings.ActionLocationSourceSettings);
                    CrossCurrentActivity.Current.Activity.StartActivity(settingIntent);
                    return(false);
                }
            }
            catch
            {
                return(false);
            }

            return(await Cts.Task);
        }
 private void BuildGoogleLocationSettingsRequest()
 {
     LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
     builder.AddLocationRequest(_googleLocationRequest);
     _googleLocationSettingsRequest = builder.Build();
 }
Beispiel #15
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}");
                }
            }
        }
        public void IsLocationEnabled(Action<bool> returnAction)
        {
            InitializeGoogleAPI();

            var locationRequestPriority = LocationRequest.PriorityBalancedPowerAccuracy;
            switch (CrossGeofence.GeofencePriority)
            {
                case GeofencePriority.HighAccuracy:
                    locationRequestPriority = LocationRequest.PriorityHighAccuracy;
                    break;
                case GeofencePriority.LowAccuracy:
                    locationRequestPriority = LocationRequest.PriorityLowPower;
                    break;
                case GeofencePriority.LowestAccuracy:
                    locationRequestPriority = LocationRequest.PriorityNoPower;
                    break;
            }
            var locationRequest = new LocationRequest();
            locationRequest.SetPriority(locationRequestPriority);
            locationRequest.SetInterval(CrossGeofence.LocationUpdatesInterval);
            locationRequest.SetFastestInterval(CrossGeofence.FastestLocationUpdatesInterval);

            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
            var pendingResult = LocationServices.SettingsApi.CheckLocationSettings(mGoogleApiClient, builder.Build());
            pendingResult.SetResultCallback((LocationSettingsResult locationSettingsResult) => {
                if (locationSettingsResult != null)
                {
                    returnAction(locationSettingsResult.Status.StatusCode <= CommonStatusCodes.Success);
                } 
            });
        }
Beispiel #17
0
        protected async override void Work()
        {
            try
            {
                if (!googleApiClient.IsConnected)
                {
                    this.OnStart(null);
                }


                LocationRequest lr = LocationRequest.Create();
                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(lr);
                builder.SetAlwaysShow(true);

                var result = await LocationServices.SettingsApi.CheckLocationSettingsAsync(googleApiClient, builder.Build());

                var res = LocationServices.FusedLocationApi.GetLastLocation(googleApiClient);
                if (res != null)
                {
                    this.genericTCPPacketSender = new GenericTCPPacketSender <ConnectedClientInfoPacket>(this.networkClient);
                    this.genericTCPPacketSender.Send(new ConnectedClientInfoPacket()
                    {
                        ConnectedClientViewModel = new ConnectedClientViewModel()
                        {
                            IsAdmin   = false,
                            Latitude  = res.Latitude,
                            Longitude = res.Longitude,
                            Machine   = CrossDeviceInfo.Current.Model,
                            Name      = "Antek"
                        }
                    });
                }
            }
            catch (FeatureNotEnabledException ex)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.activity_test);

            _startBtn      = FindViewById <Button>(Resource.Id.startBtn);
            _locationTv    = FindViewById <TextView>(Resource.Id.locationTv);
            _loginBtn      = FindViewById <Button>(Resource.Id.loginBtn);
            _getRecordsBtn = FindViewById <Button>(Resource.Id.getRecordsBtn);

            _startBtn.Enabled = false;
            _loginBtn.Enabled = false;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.Q)
            {
                CheckPermission(Android.Manifest.Permission.AccessBackgroundLocation,
                                Android.Manifest.Permission.AccessFineLocation,
                                Android.Manifest.Permission.AccessCoarseLocation,
                                Android.Manifest.Permission.ControlLocationUpdates,
                                Android.Manifest.Permission.Camera,
                                Android.Manifest.Permission.ReadExternalStorage,
                                Android.Manifest.Permission.WriteExternalStorage);
            }
            else
            {
                CheckPermission(Android.Manifest.Permission.AccessFineLocation,
                                Android.Manifest.Permission.AccessCoarseLocation,
                                Android.Manifest.Permission.ControlLocationUpdates,
                                Android.Manifest.Permission.Camera,
                                Android.Manifest.Permission.ReadExternalStorage,
                                Android.Manifest.Permission.WriteExternalStorage);
            }

            _startBtn.Click += delegate
            {
                LocationRequest locationRequest = LocationRequest.Create();
                locationRequest.SetInterval(10000);
                locationRequest.SetFastestInterval(5000);
                locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);

                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                builder.AddLocationRequest(locationRequest);

                SettingsClient client = LocationServices.GetSettingsClient(this);
                var            task   = client.CheckLocationSettings(builder.Build())
                                        .AddOnSuccessListener(new SuccessLisenter(async(obj) =>
                {
                    var userIds = new Dictionary <string, string>();

                    userIds.Add(_userId, _userId);

                    var adding = await ServiceInstances.TripRepository.InsertAsync(new Common.Models.Trip()
                    {
                        Description = "Test trips",
                        UserIds     = userIds
                    });

                    if (adding != null)
                    {
                        _tripId = adding.Id;
                        StartService(_tripId, _userId);
                    }
                })).AddOnFailureListener(new FailureLisenter((ex) =>
                {
                    if (ex is ResolvableApiException)
                    {
                        try
                        {
                            ResolvableApiException resolvable = (ResolvableApiException)ex;
                            resolvable.StartResolutionForResult(this,
                                                                100);
                        }
                        catch (IntentSender.SendIntentException e2x)
                        {
                            // Ignore the error.
                        }
                    }
                }));
            };

            _loginBtn.Click += async delegate
            {
                var authProvider = new FirebaseAuthProvider(new FirebaseConfig("AIzaSyCxjza0PW9fg6y4tPlljkP-iBSwOC0XY6g"));

                var login = await authProvider.SignInWithEmailAndPasswordAsync("*****@*****.**", "Hello_2020");

                if (login != null)
                {
                    _userId = login.User.LocalId;

                    var firebase = new FirebaseClient(
                        "https://friendloc-98ed3-default-rtdb.firebaseio.com/",
                        new FirebaseOptions
                    {
                        AuthTokenAsyncFactory = () => Task.FromResult(login.FirebaseToken)
                    });

                    ServiceInstances.TripRepository.Init(firebase);
                    ServiceInstances.UserRepository.Init(firebase);

                    _startBtn.Enabled = true;
                }
            };

            _getRecordsBtn.Click += async delegate
            {
                var res = await ServiceInstances.TripRepository.GetById(_tripId);

                Console.WriteLine(res.Locations.Values.ToList()[0].CreatedTime);
            };
        }
Beispiel #19
0
 public void BuildLocationSettingsRequest()
 {
     LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
     builder.AddLocationRequest(mLocationRequest);
     mLocationSettingsRequest = builder.Build();
 }
Beispiel #20
0
        public async void OpenSettings()
        {
            LocationManager LM = (LocationManager)Android.App.Application.Context.GetSystemService(Context.LocationService);

            if (LM.IsProviderEnabled(LocationManager.GpsProvider) == false)
            {
                Context ctx = Android.App.Application.Context;
                p0 = Platform.CurrentActivity;
                //-----------------------------------------------------------------------------------------------------------------

                try
                {
                    GoogleApiClient
                        googleApiClient = new GoogleApiClient.Builder(ctx)
                                          .AddApi(LocationServices.API)
                                          .Build();

                    googleApiClient.Connect();

                    LocationRequest
                        locationRequest = LocationRequest.Create()
                                          .SetPriority(LocationRequest.PriorityBalancedPowerAccuracy)
                                          .SetInterval(interval)
                                          .SetFastestInterval(fastestInterval);

                    LocationSettingsRequest.Builder
                        locationSettingsRequestBuilder = new LocationSettingsRequest.Builder()
                                                         .AddLocationRequest(locationRequest);

                    locationSettingsRequestBuilder.SetAlwaysShow(false);

                    LocationSettingsResult locationSettingsResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(googleApiClient, locationSettingsRequestBuilder.Build());

                    if (locationSettingsResult.Status.StatusCode == LocationSettingsStatusCodes.ResolutionRequired)
                    {
                        locationSettingsResult.Status.StartResolutionForResult(p0, 0);
                    }
                }
                catch (Exception exception)
                {
                    // Log exception
                }

                //-----------------------------------------------------------------------------------------------------------------

                //ctx.StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings).SetFlags(ActivityFlags.NewTask));
                //Application.Context.StartActivity(new Android.Content.Intent(Android.Provider.Settings.ActionLocat‌​ionSourceSettings));
            }
            else
            {
                //this is handled in the PCL
            }
        }
        public void IsLocationEnabled(Action <bool> returnAction)
        {
            InitializeGoogleAPI();
            if (mGoogleApiClient == null || CheckPermissions() == false)
            {
                returnAction(false);
                return;
            }
            mFusedLocationProviderClient = LocationServices.GetFusedLocationProviderClient(Android.App.Application.Context);
            mGeofencingClient            = LocationServices.GetGeofencingClient(Application.Context);
            mGeofenceList = new List <Android.Gms.Location.IGeofence>();

            var locationRequestPriority = LocationRequest.PriorityBalancedPowerAccuracy;

            switch (CrossGeofence.GeofencePriority)
            {
            case GeofencePriority.HighAccuracy:
                locationRequestPriority = LocationRequest.PriorityHighAccuracy;
                break;

            case GeofencePriority.LowAccuracy:
                locationRequestPriority = LocationRequest.PriorityLowPower;
                break;

            case GeofencePriority.LowestAccuracy:
                locationRequestPriority = LocationRequest.PriorityNoPower;
                break;
            }

            mLocationRequest = new LocationRequest();
            mLocationRequest.SetPriority(locationRequestPriority);
            mLocationRequest.SetInterval(CrossGeofence.LocationUpdatesInterval);
            mLocationRequest.SetFastestInterval(CrossGeofence.FastestLocationUpdatesInterval);

            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(mLocationRequest);
            var pendingResult = LocationServices.SettingsApi.CheckLocationSettings(mGoogleApiClient, builder.Build());

            pendingResult.SetResultCallback((LocationSettingsResult locationSettingsResult) => {
                if (locationSettingsResult != null)
                {
                    returnAction(locationSettingsResult.Status.StatusCode <= CommonStatusCodes.Success);
                }
            });
            System.Diagnostics.Debug.WriteLine("End of IsLocationEnabled, clients should be created");
        }
        private void CheckLocationSettings()
        {
            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                                                      .AddLocationRequest(mLocationRequest);
            builder.SetAlwaysShow(true);
            var task = LocationServices.GetSettingsClient(Activity).CheckLocationSettings(builder.Build());

            task.AddOnSuccessListener(new OnSuccessListener(t =>
            {
                mLocationCallback.MyLocation += MLocationCallback_MyLocation;
            })).AddOnFailureListener(new OnFailureListener(e =>
            {
                int statusCode = ((ApiException)e).StatusCode;
                switch (statusCode)
                {
                case CommonStatusCodes.ResolutionRequired:
                    try
                    {
                        ResolvableApiException resolvable = (ResolvableApiException)e;
                        StartIntentSenderForResult(resolvable.Resolution.IntentSender, RequestCode, null, 0, 0, 0, null);
                    }
                    catch (SendIntentException)
                    {
                    }
                    catch (ClassCastException)
                    {
                    }
                    break;

                case LocationSettingsStatusCodes.SettingsChangeUnavailable:

                    break;
                }
            }));
        }
        private bool DisplayLocationSettingsRequest()
        {
            bool islocationOn    = false;
            var  googleApiClient = new GoogleApiClient.Builder(this).AddApi(LocationServices.API).Build();

            googleApiClient.Connect();

            var locationRequest = LocationRequest.Create();

            locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
            locationRequest.SetInterval(10000);
            locationRequest.SetFastestInterval(10000 / 2);

            var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);

            builder.SetAlwaysShow(true);

            var result = LocationServices.SettingsApi.CheckLocationSettings(googleApiClient, builder.Build());

            result.SetResultCallback((LocationSettingsResult callback) =>
            {
                switch (callback.Status.StatusCode)
                {
                case LocationSettingsStatusCodes.Success:
                    {
                        islocationOn = true;
                        break;
                    }

                case LocationSettingsStatusCodes.ResolutionRequired:
                    {
                        try
                        {
                            callback.Status.StartResolutionForResult(this, 100);
                        }
                        catch (IntentSender.SendIntentException e)
                        {
                        }

                        break;
                    }

                default:
                    {
                        StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings));
                        break;
                    }
                }
            });
            return(islocationOn);
        }
Beispiel #24
0
        public async Task DisplayLocationSettingsRequest()
        {
            LocationSettingsResponse locationSettingsResponse;
            var activity = Xamarin.Essentials.Platform.CurrentActivity;

            try
            {
                var locationRequest = LocationRequest.Create();
                locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
                locationRequest.SetInterval(10000);
                locationRequest.SetFastestInterval(5000);

                var locationSettingsRequestBuilder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
                locationSettingsRequestBuilder.SetAlwaysShow(false);
                locationSettingsResponse = await LocationServices.GetSettingsClient(activity).CheckLocationSettingsAsync(locationSettingsRequestBuilder.Build());
            }
            catch (ApiException ex)
            {
                switch (ex.StatusCode)
                {
                case CommonStatusCodes.ResolutionRequired:
                    var resolvable = (ResolvableApiException)ex;
                    resolvable.StartResolutionForResult(activity, 0x1);
                    break;

                default:
                    break;
                }
            }

            //var googleApiClient = new GoogleApiClient.Builder(this).AddApi(LocationServices.API).Build();
            //googleApiClient.Connect();

            //var locationRequest = LocationRequest.Create();
            //locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
            //locationRequest.SetInterval(10000);
            //locationRequest.SetFastestInterval(10000 / 2);

            //var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
            //builder.SetAlwaysShow(true);

            //var result = LocationServices.SettingsApi.CheckLocationSettings(googleApiClient, builder.Build());
            //result.SetResultCallback((LocationSettingsResult callback) =>
            //{
            //    switch (callback.Status.StatusCode)
            //    {
            //        case CommonStatusCodes.Success:
            //        {
            //            //DoStuffWithLocation();
            //            break;
            //        }
            //        case CommonStatusCodes.ResolutionRequired:
            //        {
            //            try
            //            {
            //                callback.Status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS);
            //            }
            //            catch (IntentSender.SendIntentException e)
            //            {
            //            }

            //            break;
            //        }
            //        default:
            //        {
            //            // If all else fails, take the user to the android location settings
            //            StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings));
            //            break;
            //        }
            //    }
            //});
        }
        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}");
                }
            }
        }
Beispiel #26
0
        public async Task RequestEnableGPS()
        {
            try
            {
                var result = (LocationSettingsResult)(await LocationServices.SettingsApi.CheckLocationSettings(GoogleApiClient, Builder.Build()));

                if (result.Status.StatusCode != LocationSettingsStatusCodes.Success)
                {
                    result.Status.StartResolutionForResult(MainActivity.Instance, 0x1);
                }
            }
            catch (System.Exception ex)
            {
                string title = this.GetType().Name + " - " + System.Reflection.MethodBase.GetCurrentMethod().Name;
                BalizaFacil.App.Instance.UnhandledException(title, ex);
            }
        }
        void BuildLocationRequest()
        {
            _locRequest = new LocationRequest();
            _locRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
            _locRequest.SetFastestInterval(1 * 1000);
            _locRequest.SetInterval(2 * 1000);

            int sdk = (int)Android.OS.Build.VERSION.SdkInt;

            if (sdk < 23 ||
                (this.CheckCallingOrSelfPermission(Android.Manifest.Permission.AccessFineLocation) == Permission.Granted &&
                 this.CheckCallingOrSelfPermission(Android.Manifest.Permission.AccessCoarseLocation) == Permission.Granted))
            {
                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(_locRequest);
                builder.SetAlwaysShow(true);

                var result = LocationServices.SettingsApi.CheckLocationSettings(_apiClient, builder.Build());
                result.SetResultCallback(this);
            }
            else
            {
                Android.Support.V4.App.ActivityCompat.RequestPermissions(this, new System.String[] { Android.Manifest.Permission.AccessFineLocation, Android.Manifest.Permission.AccessCoarseLocation }, 1);
            }
        }
		protected void BuildLocationSettingsRequest ()
		{
			LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder ();
			builder.AddLocationRequest (mLocationRequest);
			mLocationSettingsRequest = builder.Build ();
		}
 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
 {
     if (CheckCallingOrSelfPermission(Android.Manifest.Permission.AccessFineLocation) == Permission.Granted &&
         CheckCallingOrSelfPermission(Android.Manifest.Permission.AccessCoarseLocation) == Permission.Granted)
     {
         LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(_locRequest);
         var result = LocationServices.SettingsApi.CheckLocationSettings(_apiClient, builder.Build());
         result.SetResultCallback(this);
     }
 }
Beispiel #30
0
        public void IsLocationEnabled(Action <bool> returnAction)
        {
            InitializeGoogleAPI();
            if (mGoogleApiClient == null)
            {
                returnAction(false);
                return;
            }


            var locationRequestPriority = LocationRequest.PriorityBalancedPowerAccuracy;

            switch (CrossGeofence.GeofencePriority)
            {
            case GeofencePriority.HighAccuracy:
                locationRequestPriority = LocationRequest.PriorityHighAccuracy;
                break;

            case GeofencePriority.LowAccuracy:
                locationRequestPriority = LocationRequest.PriorityLowPower;
                break;

            case GeofencePriority.LowestAccuracy:
                locationRequestPriority = LocationRequest.PriorityNoPower;
                break;
            }
            var locationRequest = new LocationRequest();

            locationRequest.SetPriority(locationRequestPriority);
            locationRequest.SetInterval(CrossGeofence.LocationUpdatesInterval);
            locationRequest.SetFastestInterval(CrossGeofence.FastestLocationUpdatesInterval);

            LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);
            var pendingResult = LocationServices.SettingsApi.CheckLocationSettings(mGoogleApiClient, builder.Build());

            pendingResult.SetResultCallback((LocationSettingsResult locationSettingsResult) => {
                if (locationSettingsResult != null)
                {
                    returnAction(locationSettingsResult.Status.StatusCode <= CommonStatusCodes.Success);
                }
            });
        }
        public void GetLocation(bool requestLocationPermission = true)
        {
            mRequestLocationPermission = requestLocationPermission;
            if (GoogleApiClient.IsConnected)
            {
                if (mRequestLocationPermission)
                {
                    try
                    {
                        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder().AddLocationRequest(mLocationRequest);
                        builder.SetAlwaysShow(true);
                        var result = LocationServices.SettingsApi.CheckLocationSettings(mGoogleApiClient, builder.Build());
                        result.SetResultCallback(new Android.Gms.Common.Apis.ResultCallback <LocationSettingsResult>((locationSettingsResult) =>
                        {
                            var status = locationSettingsResult.Status;
                            var state  = locationSettingsResult.LocationSettingsStates;

                            switch (status.StatusCode)
                            {
                            case LocationSettingsStatusCodes.Success:
                                // All location settings are satisfied. The client can initialize location requests here.
                                StartLocationUpdates();
                                break;

                            case LocationSettingsStatusCodes.ResolutionRequired:
                                // Location settings are not satisfied. But could be fixed by showing the user a dialog.
                                try
                                {
                                    // Show the dialog by calling startResolutionForResult(), and check the result in onActivityResult().
                                    status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS);
                                }
                                catch (IntentSender.SendIntentException)
                                {
                                    // Ignore the error.
                                    appServices.RaiseAppOnLocationChanged(false);
                                }
                                break;

                            case LocationSettingsStatusCodes.SettingsChangeUnavailable:
                                // Location settings are not satisfied. However, we have no way to fix the
                                // settings so we won't show the dialog.
                                appServices.RaiseAppOnLocationChanged(false);
                                break;
                            }
                        }));
                    }
                    catch (Exception e)
                    {
                        ExceptionHandler.Catch(e);
                    }
                }
                else
                {
                    StartLocationUpdates();
                }
            }
            else
            {
                GoogleApiClient.Connect();
            }
        }
Beispiel #32
0
        public void PedirGps()
        {
            var googleApiClient = new GoogleApiClient.Builder(Context).AddApi(LocationServices.API).Build();

            googleApiClient.Connect();

            var locationRequest = LocationRequest.Create();

            locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
            locationRequest.SetInterval(10000);
            locationRequest.SetFastestInterval(10000 / 2);

            var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);

            builder.SetAlwaysShow(true);

            var result = LocationServices.SettingsApi.CheckLocationSettings(googleApiClient, builder.Build());

            result.SetResultCallback(async(LocationSettingsResult callback) =>
            {
                switch (callback.Status.StatusCode)
                {
                case LocationSettingsStatusCodes.Success:
                    {
                        await Utils.PedirPermissaoLocalizacao();
                        break;
                    }

                case LocationSettingsStatusCodes.ResolutionRequired:
                    {
                        try
                        {
                            callback.Status.StartResolutionForResult((Activity)Context, Utils.REQUEST_CHECK_SETTINGS);
                            await Utils.PedirPermissaoLocalizacao();
                        }
                        catch (IntentSender.SendIntentException)
                        {
                        }
                        break;
                    }
                }
            });
        }
Beispiel #33
0
        /// <summary>
        /// Включение gps
        /// </summary>
        private void TurnOnGpsV2()
        {
            var googleApiClient = new GoogleApiClient.Builder(this).AddApi(LocationServices.API).Build();

            googleApiClient.Connect();

            var locationRequest = LocationRequest.Create();

            locationRequest.SetPriority(LocationRequest.PriorityHighAccuracy);
            locationRequest.SetInterval(10000);
            locationRequest.SetFastestInterval(10000 / 2);

            var builder = new LocationSettingsRequest.Builder().AddLocationRequest(locationRequest);

            builder.SetAlwaysShow(true);

            var result = LocationServices.SettingsApi.CheckLocationSettings(googleApiClient, builder.Build());

            result.SetResultCallback((LocationSettingsResult callback) =>
            {
                switch (callback.Status.StatusCode)
                {
                case LocationSettingsStatusCodes.Success:
                    {
                        //DoStuffWithLocation();
                        break;
                    }

                case LocationSettingsStatusCodes.ResolutionRequired:
                    {
                        try
                        {
                            // Show the dialog by calling startResolutionForResult(), and check the result
                            // in onActivityResult().
                            callback.Status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS);
                        }
                        catch (IntentSender.SendIntentException e)
                        {
                        }

                        break;
                    }

                default:
                    {
                        // If all else fails, take the user to the android location settings
                        StartActivity(new Intent(Android.Provider.Settings.ActionLocationSourceSettings));
                        break;
                    }
                }
            });
        }