Unity 2021 请求 Android 12 读取本地文件权限

目标

工具:

  • Unity 2021.2.14c1f1
  • Android 12 系统手机

目标:实现Unity打出来的Apk包能请求读写android手机本地文件权限

原理

在Android系统中,操作手机中不安全的数据时,需要配置相应的权限,只有经过用户许可才能使用,设置各种权限的原因在于保护用户隐私,那么当我们开发 unity 项目需要请求权限时,可以根据以下方式

  1. 基于 Unity 官方 API 实现申请 Android 权限,这样不需要在 Android 中写申请权限
  2. Unity 2019 起提供了 Permission 类申请 Android 权限,2021.3 版本 Unity 的API如下:
静态属性 含义 描述
Camera 照相机 在请求权限或检查是否已授予使用相机的权限时使用
CoarseLocation 粗略的用户位置定位 在请求权限或检查是否已授予以粗粒度使用用户位置的权限时使用
FineLocation 精细的用户位置定位 在请求权限或检查是否已授予高精度使用用户位置的权限时使用
ExternalStorageRead 外部存储(如SD卡)读取 在请求权限或检查是否已授予从外部存储(如 SD 卡)读取的权限时使用
ExternalStorageWrite 外部存储(如SD卡)写入 在请求权限或检查是否已授予写入外部存储(如 SD 卡)的权限时使用
Microphone 麦克风等权限 在请求权限或检查是否已授予使用话筒的权限时使用

unity 2021.3 官方文档 Permission 介绍


实现

1. 需要在 C# 代码中添加申请权限

using UnityEngine.Android;
...
#if UNITY_ANDROID
    //安卓平台要请求从外部设备读写权限,如果安装后通过了权限请求,则以后这个APP就不会弹出请求权限框
    //但若安装后请求多次权限,都不通过,则多次后就不会弹出请求权限框
    
    //请求从 (SD 卡等)外部存储读取的权限
    if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead)) {
    
    
        Permission.RequestUserPermission(Permission.ExternalStorageRead);
    }
    
    //请求 写入外部存储(如 SD 卡)的权限       
    if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)) {
    
    
        Permission.RequestUserPermission(Permission.ExternalStorageWrite);
    }
#endif
...

这里只请求外部存储设备的读写权限,其他权限可以参考 Permission API 实现:
在这里插入图片描述

2. 需要在 manifest 文件中声明权限

unity 打 apk 时生成 manifest 文件模板可以手动配置:File > BuildSettings > PlayerSettings > Player > PublishingSettings,启用 CustomMainManifest,表示可以自定义 AndroidManifest.xml 文件

在这里插入图片描述
通过路径找到对应的 AndroidManifest.xml 文件:

在这里插入图片描述

在 application 标签上面添加所需要的安卓权限的声明:在这里插入图片描述

保存后,打APK包运行即可看到在运行到 C# 代码时,请求安卓权限

猜你喜欢

转载自blog.csdn.net/qq_36804363/article/details/128129286