mirror of
https://github.com/BeyondDimension/SteamTools.git
synced 2026-10-21 09:02:26 +08:00
62 lines
2.4 KiB
C#
62 lines
2.4 KiB
C#
using System.Threading.Tasks;
|
|
using Xamarin.Essentials;
|
|
|
|
namespace System.Application.Services.Implementation
|
|
{
|
|
/// <inheritdoc cref="IPermissions"/>
|
|
public class PermissionsImpl : IPermissions
|
|
{
|
|
/// <summary>
|
|
/// 权限被拒绝,可提示用户在“设置”中启用,通常应有不再提示的选项
|
|
/// </summary>
|
|
/// <param name="permission"></param>
|
|
protected virtual void PromptUserGoToSettings(IPermissions.IPermission permission)
|
|
{
|
|
// 可由平台重写此函数实现,通常为显示一个UI上的弹窗,上有复选框不再显示
|
|
}
|
|
|
|
/// <summary>
|
|
/// 提示用户需要权限的其他信息
|
|
/// </summary>
|
|
/// <param name="permission"></param>
|
|
protected virtual void ShowRationale(IPermissions.IPermission permission)
|
|
{
|
|
// 可由平台重写此函数实现,通常为显示一个吐司消息,因调用此函数后会立即开始重新申请权限
|
|
}
|
|
|
|
public async Task<PermissionStatus> 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;
|
|
}
|
|
}
|
|
} |