首页 > 解决方案 > 如何获取开启 GPS 定位的返回值?

问题描述

在这里,我使用 LocationServices 在 xamarin android 上打开 GPS

 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);
                }
            }
            catch (Exception ex)
            {

            }

但我想从此代码中获取返回值。

此代码将打开一个打开位置弹出窗口,如果用户打开然后我想从中获取布尔值。但是我可以从哪里获得用户是否接受打开位置的布尔值。

这是弹出窗口

在此处输入图像描述

如何从此弹出窗口中获取值?

标签: androidxamarinxamarin.formsgoogle-location-services

解决方案


根据您的描述,您想在单击“确定”或“否”时获得返回值,从位置弹出窗口中获得感谢,对吗?

如果是,我建议你可以安装plugin.permission来检查状态。查看以下代码,如果单击确定,则status == PermissionStatus.Granted。如果您单击 NO,Thanks, status=PermissionStatus.Denied

 private async void OnCheck(object sender, EventArgs e)
    {
        try
        {
            var status = await CrossPermissions.Current.CheckPermissionStatusAsync<LocationPermission>();
            if (status != PermissionStatus.Granted)
            {
                if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
                {
                    await DisplayAlert("Need location", "Gunna need that location", "OK");
                }

                status = await CrossPermissions.Current.RequestPermissionAsync<LocationPermission>();
            }

            if (status == PermissionStatus.Granted)
            {
                //Query permission
            }
            else if (status != PermissionStatus.Unknown)
            {
                //location denied
            }
        }
        catch (Exception ex)
        {
            //Something went wrong
        }
    }

推荐阅读