using System.Threading.Tasks; using Xamarin.Essentials; namespace System.Application.Services.Implementation { /// public class PermissionsImpl : IPermissions { /// /// 权限被拒绝,可提示用户在“设置”中启用,通常应有不再提示的选项 /// /// protected virtual void PromptUserGoToSettings(IPermissions.IPermission permission) { // 可由平台重写此函数实现,通常为显示一个UI上的弹窗,上有复选框不再显示 } /// /// 提示用户需要权限的其他信息 /// /// protected virtual void ShowRationale(IPermissions.IPermission permission) { // 可由平台重写此函数实现,通常为显示一个吐司消息,因调用此函数后会立即开始重新申请权限 } public async Task CheckAndRequestAsync(IPermissions.IPermission permission) { // https://docs.microsoft.com/zh-cn/xamarin/essentials/permissions?context=xamarin%2Fandroid&tabs=android#general-usage var status = await permission.CheckStatusAsync(); if (status == PermissionStatus.Granted) return status; if (status == PermissionStatus.Denied && DeviceInfo.Platform == DevicePlatform.iOS) { // Prompt the user to turn on in settings // 提示用户在“设置”中启用 // On iOS once a permission has been denied it may not be requested again from the application // 在iOS上,一旦权限被拒绝,就不能再次从应用程序请求权限 PromptUserGoToSettings(permission); return status; } if (permission.ShouldShowRationale()) { // Prompt the user with additional information as to why the permission is needed // 提示用户需要权限的其他信息 ShowRationale(permission); } status = await permission.RequestAsync(); if (status == PermissionStatus.Denied) { PromptUserGoToSettings(permission); } return status; } } }