PermissionManager

本文介绍了一个针对UnityAndroid应用的权限管理类,提供请求特定权限、处理用户同意/拒绝回调以及覆盖默认回调功能,使用了Android插件和枚举来简化权限操作。
摘要由CSDN通过智能技术生成

描述:

用于安卓端申请权限,并处理回调。

代码:

#if UNITY_ANDROID
using UnityEngine;
using UnityEngine.Android;

public static class  PermissionManager
{
    /// <summary>
    /// 同意授权的通用回调
    /// </summary>
    public static System.Action<string> granted;
    /// <summary>
    /// 拒绝授权的通用回调
    /// </summary>
    public static System.Action<string> denied;
    /// <summary>
    /// 拒绝授权并不在询问的通用回调
    /// </summary>
    public static System.Action<string> deniedAndDontAskAgain;

    /// <summary>
    /// 权限实际名称
    /// </summary>
    private static string[] permissionRequest = new string[]
    {
        "android.permission.CAMERA",
        "android.permission.RECORD_AUDIO" ,
        "android.permission.READ_EXTERNAL_STORAGE",
        "android.permission.WRITE_EXTERNAL_STORAGE",
        "android.permission.ACCESS_COARSE_LOCATION",
        "android.permission.ACCESS_FINE_LOCATION"
    };
    private static string[] permissionName = new string[]
    {
        "相机",
        "麦克风" ,
        "SD卡写入",
        "SD卡读取",
        "定位",
        "精准定位"
    };

    public static void GetPermission(this MonoBehaviour component, Request permission, System.Action<Result> callBack = null, bool cover = false)
    {
        component.StartCoroutine(StartGetPermission(permission, callBack, cover));
    }
    /// <summary>
    /// 开始获取权限 写在协程中是因为回调时是子线程 无法操作部分UnityAPI 用携程拉回主线程
    /// </summary>
    /// <param name="permission">需获取的权限</param>
    /// <param name="callBack">回调</param>
    /// <param name="cover">是否覆盖默认回调</param>
    /// <returns></returns>
    private static System.Collections.IEnumerator StartGetPermission(Request permission, System.Action<Result> callBack, bool cover)
    {
        int choise = (int)permission;
        System.Collections.Generic.List<string> permissions = new System.Collections.Generic.List<string>();
        for (int i = 0; i < permissionRequest.Length; i++)
            if ((choise & 1 << i) > 0)
                if (!Permission.HasUserAuthorizedPermission(permissionRequest[i]))
                    permissions.Add(permissionRequest[i]);

        if (permissions.Count > 0)
        {
            int callBackID = -1;
            string content = string.Empty;

            PermissionCallbacks callbacks = new PermissionCallbacks();
            callbacks.PermissionGranted += (callback) =>
            {
                callBackID = 0;
                content = callback;
            };
            callbacks.PermissionDenied += (callback) =>
            {
                callBackID = 1;
                content = callback;
            };
            callbacks.PermissionDeniedAndDontAskAgain += (callback) =>
            {
                callBackID = 2;
                content = callback;
            };

            if (permissions.Count > 1)
                Permission.RequestUserPermissions(permissions.ToArray(), callbacks);
            else
                Permission.RequestUserPermission(permissions[0], callbacks);

            WaitForSeconds waitTime = new WaitForSeconds(0.5f);
            while (callBackID < 0)
                yield return waitTime;

            if (!cover)
            {
                for (int i = 0; i < permissionRequest.Length; i++)
                    if (permissionRequest[i].Equals(content))
                    {
                        content = permissionName[i];
                        break;
                    }

                switch (callBackID)
                {
                    case 0:
                        granted?.Invoke(content);
                        break;
                    case 1:
                        denied?.Invoke(content);
                        break;
                    case 2:
                        deniedAndDontAskAgain?.Invoke(content);
                        break;
                }
            }

            callBack?.Invoke((Result)callBackID);
        }
        else
            callBack?.Invoke(Result.已授权);
    }

    /// <summary>
    /// 可获取的权限
    /// </summary>
    public enum Request
    {
        相机 = 1,
        麦克风 = 2,
        读取 = 4,
        写入 = 8,
        粗略定位 = 16,
        精确定位 = 32
    }
    /// <summary>
    /// 权限获取结果
    /// </summary>
    public enum Result
    {
        已授权,
        未授权,
        未授权且不再询问
    }
}
#endif
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的 Java 权限管理实现代码: ```java import java.util.ArrayList; import java.util.List; public class PermissionManager { private List<User> users; private List<Role> roles; public PermissionManager() { this.users = new ArrayList<>(); this.roles = new ArrayList<>(); } public void addUser(User user) { this.users.add(user); } public void addRole(Role role) { this.roles.add(role); } public void assignRole(User user, Role role) { user.addRole(role); } public boolean checkPermission(User user, String permission) { for (Role role : user.getRoles()) { if (role.getPermissions().contains(permission)) { return true; } } return false; } } class User { private String name; private List<Role> roles; public User(String name) { this.name = name; this.roles = new ArrayList<>(); } public String getName() { return name; } public void addRole(Role role) { this.roles.add(role); } public List<Role> getRoles() { return roles; } } class Role { private String name; private List<String> permissions; public Role(String name) { this.name = name; this.permissions = new ArrayList<>(); } public String getName() { return name; } public void addPermission(String permission) { this.permissions.add(permission); } public List<String> getPermissions() { return permissions; } } ``` 使用示例: ```java PermissionManager pm = new PermissionManager(); User user1 = new User("user1"); User user2 = new User("user2"); Role role1 = new Role("role1"); Role role2 = new Role("role2"); role1.addPermission("read"); role2.addPermission("write"); pm.addUser(user1); pm.addUser(user2); pm.addRole(role1); pm.addRole(role2); pm.assignRole(user1, role1); pm.assignRole(user2, role2); System.out.println(pm.checkPermission(user1, "read")); // true System.out.println(pm.checkPermission(user2, "read")); // false System.out.println(pm.checkPermission(user2, "write")); // true ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值