Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.forms 如何在用户单击don';别再问了_Xamarin.forms_Permissions_Geolocation - Fatal编程技术网

Xamarin.forms 如何在用户单击don';别再问了

Xamarin.forms 如何在用户单击don';别再问了,xamarin.forms,permissions,geolocation,Xamarin.forms,Permissions,Geolocation,大家好,我制作了一个xamarin.forms应用程序。我需要请求用户允许应用程序使用他的位置。这是我的代码: var location = await Geolocation.GetLastKnownLocationAsync(); if (location == null) { location = await Geolocation.GetLocationAsync(new

大家好,我制作了一个xamarin.forms应用程序。我需要请求用户允许应用程序使用他的位置。这是我的代码:

      var location = await Geolocation.GetLastKnownLocationAsync();
                if (location == null)
                {
                    location = await Geolocation.GetLocationAsync(new GeolocationRequest
                    {
                        DesiredAccuracy = GeolocationAccuracy.Medium,
                        Timeout = TimeSpan.FromSeconds(30)
                    }); ;
                }
                if (location == null)
                    LabelLocation.Text = " NO GPS LOCATION";
                else
                    LabelLocation.Text = $"{location.Latitude} {location.Longitude}";
            }
            catch (FeatureNotSupportedException fnsEx)
            {
                // Handle not supported on device exception

                await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
            }
            catch (FeatureNotEnabledException fneEx)
            {
                // Handle not enabled on device exception

                await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
            }
            catch (PermissionException pEx)
            {
                // Handle permission exception

                await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
            }
            catch (Exception ex)
            {
                // Unable to get location

                await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
            }

当用户再次单击“永不显示”时,每次打开页面时,它都会进入
PermissionException
,这是正常的。但是我想再次显示权限对话框,因为没有位置无法显示数据。有可能做到这一点吗?

简短的回答是,不,你不能。正如您在请求权限中所看到的(当用户拒绝权限并检查从现在起不应显示任何提示时):

向用户解释该功能不可用,因为该功能需要用户拒绝的权限。同时,尊重用户的决定。不要为了说服用户改变他们的决定而链接到系统设置

最佳做法是在请求许可之前向用户详细解释。如果用户仍决定拒绝您此权限,则显示一条消息,说明此特定逻辑根本无法工作。这与最佳实践背道而驰,但如果您愿意,可以将用户重定向到
设置
,用户可以在那里启用权限。然而,我强烈建议你不要这样做

一个重要的旁注,同样来自:

如果
ContextCompat.checkSelfPermission()
方法返回
PERMISSION\u DENIED
,则调用
应显示requestpermissionrational()
。如果此方法返回
true
,则向用户显示教育用户界面。在此UI中,描述用户希望启用的功能需要特定权限的原因

此外,请使用
Xamarin.Essentials
进行。那里的一切都有很好的记录


另外,我强烈建议您阅读官方Android团队提供的其他有用实践。

我使用Essential Geologication哦,对不起,太糟糕了。那么一切都好了。只需在使用前检查权限,因为
权限
API更灵活,您可以根据用户的选择随时调整流量/UI。