//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 } }
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) { } }
public async Task HandleResult(LocationSettingsResult locationSettingsResult) { var status = locationSettingsResult.Status; switch (status.StatusCode) { case CommonStatusCodes.Success: Log.Info(TAG, "All location settings are satisfied."); await StartLocationUpdates(); break; case CommonStatusCodes.ResolutionRequired: Log.Info(TAG, "Location settings are not satisfied. Show the user a dialog to" + "upgrade location settings "); try { status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException) { Log.Info(TAG, "PendingIntent unable to execute request."); } break; case LocationSettingsStatusCodes.SettingsChangeUnavailable: Log.Info(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + "not created."); break; } }
private async Task CheckLocationSettingsAsync() { LocationSettingsResult locationSettingResult = await LocationServices.SettingsApi.CheckLocationSettingsAsync(mGoogleApiClient, mLocationSettingsRequest); // Antoistixo toy onResult(LocationSettingsResult result) await HanleResult(locationSettingResult); }
private async System.Threading.Tasks.Task HandleResult(LocationSettingsResult locationSettingsResult) { var status = locationSettingsResult.Status; switch (status.StatusCode) { case CommonStatusCodes.Success: Log.Debug(Tag, "All location settings are satisfied."); await RequestLocationUpdatesAsync(); break; case CommonStatusCodes.ResolutionRequired: Log.Debug(Tag, "Location settings are not satisfied. Show the user a dialog to" + "upgrade location settings "); try { OnRequestLocation(status); // status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException) { Log.Debug(Tag, "PendingIntent unable to execute request."); } break; case LocationSettingsStatusCodes.SettingsChangeUnavailable: Log.Debug(Tag, "Location settings are inadequate, and cannot be fixed here. Dialog " + "not created."); OnLocationServiceError(LocationErrors.OtherErrors); break; } }
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.ActionLocationSourceSettings)); } else { //this is handled in the PCL } }
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 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 void StartWatcher(int accuracy, int interval, int fastestInterval, LocationCallback callback) { if (this.Running) { return; } this.callback = callback; var locationRequest = new LocationRequest() .SetInterval(interval) .SetFastestInterval(fastestInterval) .SetPriority(accuracy); //location settings dialog GoogleApiClient googleApiClient = new GoogleApiClient.Builder(Application.Context) .AddApi(LocationServices.API) .Build(); googleApiClient.Connect(); LocationSettingsRequest.Builder locationSettingsRequestBuilder = new LocationSettingsRequest.Builder(); locationSettingsRequestBuilder.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); } // await client.RequestLocationUpdatesAsync(locationRequest, this.callback).ContinueWith(t => { this.Running = true; }); }
public async Task HandleResult(LocationSettingsResult locationSettingsResult) { var status = locationSettingsResult.Status; switch (status.StatusCode) { case CommonStatusCodes.Success: Log.Info(TAG, "All location settings are satisfied."); //START LOCATION SERVICE /*await StartLocationUpdates();*/ break; case CommonStatusCodes.ResolutionRequired: Log.Info(TAG, "Location settings are not satisfied. Show the user a dialog to" + "upgrade location settings "); try { //BRING UP THE DIALOG status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException) { Log.Info(TAG, "PendingIntent unable to execute request."); } break; case LocationSettingsStatusCodes.SettingsChangeUnavailable: //SEND TO MANUAL PAGE TO CHANGE DIALOG Log.Info(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + "not created."); //OLD WAY TO GET SETTINGS var intent = new Intent(Android.Provider.Settings.ActionLocationSourceSettings); StartActivity(intent); break; } }
public async Task HandleResult (LocationSettingsResult locationSettingsResult) { var status = locationSettingsResult.Status; switch (status.StatusCode) { case CommonStatusCodes.Success: Log.Info (TAG, "All location settings are satisfied."); await StartLocationUpdates (); break; case CommonStatusCodes.ResolutionRequired: Log.Info (TAG, "Location settings are not satisfied. Show the user a dialog to" + "upgrade location settings "); try { status.StartResolutionForResult (this, REQUEST_CHECK_SETTINGS); } catch (IntentSender.SendIntentException) { Log.Info (TAG, "PendingIntent unable to execute request."); } break; case LocationSettingsStatusCodes.SettingsChangeUnavailable: Log.Info (TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " + "not created."); break; } }