• 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
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

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

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

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

    在这里插入图片描述

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

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

  • 相关阅读:
    将多张图片制作gif
    如何使用无代码系统搭建软件平台?有哪些开源无代码开发平台?
    【后端面经-数据库】MySQL的存储引擎简介
    【C++】泛型编程
    Technical Support
    微服务分布式基于Springcloud的拍卖管理系统597wx
    深度优先搜索(java)
    抖音网红百叶窗短视频Python全程托管一键生成
    在软件测试行业这种情况下,凭什么他能拿25k?我却约面试都难?
    Nacos - 支持PostgreSQL
  • 原文地址:https://blog.csdn.net/qq_36804363/article/details/128129286