示例#1
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)
            {
            }
        }
示例#2
0
        }                                                         //singleton

        public void Initialize(Context context)
        {
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
                                      .RequestEmail()
                                      .RequestProfile()
                                      .Build();

            //_googleApiClient = new GoogleApiClient.Builder(context)
            //    //.AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
            //    .AddConnectionCallbacks(this)
            //    .AddOnConnectionFailedListener(this)
            //    .AddApi(DriveClass.API).AddScope(new Scope(Scopes.DriveFile))
            //    .Build();
            //


            //auth
            _googleApiClient = new GoogleApiClient.Builder(context)
                               .AddConnectionCallbacks(this)
                               .AddOnConnectionFailedListener(this)
                               .AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
                               .Build();

            if (!_googleApiClient.IsConnected)
            {
                _googleApiClient.Connect();  //logout: GoogleManager._googleApiClient.Disconnect();
            }
        }
示例#3
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
            }
        }
示例#4
0
        static GoogleApiClient BuildApiClient()
        {
            var c = new GoogleApiClient.Builder(Application.Context).
                    AddApi(LocationServices.API)
                    .Build();

            c.Connect();
            return(c);
        }
示例#5
0
        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;
                        //DoStuffWithLocation();
                        break;
                    }

                case LocationSettingsStatusCodes.ResolutionRequired:
                    {
                        try
                        {
                            // Show the dialog by calling startResolutionForResult(), and check the result
                            // in onActivityResult().
                            callback.Status.StartResolutionForResult(this, 100);
                        }
                        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;
                    }
                }
            });
            return(islocationOn);
        }
示例#6
0
        protected override async Task <bool> EnableDeviceLocationService()
        {
            var context         = Forms.Context;
            var activity        = (MainActivity)context;
            var listener        = new ActivityResultListener(activity);
            var googleApiClient = new GoogleApiClient.Builder(activity).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:
                    {
                        break;
                    }

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

                        break;
                    }

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

            return(await listener.Task);
        }
示例#7
0
        private async Task OnDataChangedAsync(DataEventBuffer dataEvents)
        {
            if (localNodeId == null)
            {
                GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
                                                  .AddApi(WearableClass.API)
                                                  .Build();
                googleApiClient.Connect();

                localNodeId = (await WearableClass.NodeApi.GetLocalNodeAsync(googleApiClient).ConfigureAwait(false)).Node.Id;
            }

            ISharedPreferences settings = string.IsNullOrEmpty(sharedPrefsName) ?
                                          PreferenceManager.GetDefaultSharedPreferences(this) :
                                          GetSharedPreferences(sharedPrefsName, FileCreationMode.Private);
            ISharedPreferencesEditor     editor   = settings.Edit();
            IDictionary <string, object> allPrefs = settings.All;

            try
            {
                foreach (IDataEvent ev in dataEvents)
                {
                    IDataItem       dataItem = ev.DataItem;
                    Android.Net.Uri uri      = dataItem.Uri;

                    var nodeId = uri.Host;
                    if (nodeId.Equals(localNodeId))
                    {
                        // Change originated on this device.
                        continue;
                    }

                    if (uri.Path.StartsWith(DATA_SETTINGS_PATH))
                    {
                        if (ev.Type == DataEvent.TypeDeleted)
                        {
                            DeleteItem(uri, editor, allPrefs);
                        }
                        else
                        {
                            SaveItem(dataItem, editor, allPrefs);
                        }
                    }
                }
            }
            finally
            {
                // We don't use Apply() because we don't know what thread we're on.
                editor.Commit();
            }

            base.OnDataChanged(dataEvents);
        }
示例#8
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
            }
        }
示例#9
0
        public FusedGeolocator()
        {
            //_manager = (LocationManager)Application.Context.GetSystemService(Context.LocationService);
            //_providers = _manager.GetProviders(false).Where(s => s != LocationManager.PassiveProvider).ToArray();

            mGoogleApiClient = new GoogleApiClient.Builder((Activity)Xamarin.Forms.Forms.Context)
                               .AddApi(LocationServices.API)
                               .AddConnectionCallbacks(this)
                               .AddOnConnectionFailedListener(this)
                               .Build();

            mGoogleApiClient.Connect();
        }
        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 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);
        }
示例#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 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;
            });
        }
示例#14
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;
                    }
                }
            });
        }
示例#15
0
        public void Login(Action <GoogleUser, string> onLoginComplete)
        {
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
                                      .RequestEmail()
                                      .Build();

            _googleApiClient = new GoogleApiClient.Builder((_context).ApplicationContext)
                               .AddConnectionCallbacks(this)
                               .AddOnConnectionFailedListener(this)
                               .AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
                               .AddScope(new Scope(Scopes.Profile))
                               .Build();

            _onLoginComplete = onLoginComplete;
            Intent signInIntent = Auth.GoogleSignInApi.GetSignInIntent(_googleApiClient);

            ((MainActivity)Forms.Context).StartActivityForResult(signInIntent, 1);
            _googleApiClient.Connect();
        }