首页 > 其他分享 >如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?

如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?

时间:2024-12-27 11:30:15浏览次数:8  
标签:API Ultra Permission 读写 Settings Unity PICO Android 权限

PICO 4 Ultra 系列设备使用的安卓操作系统为 Android 14。当项目的 Write Permission 为 Externa (SDCard) 且 Android API Level 大于 32 时,Unity 提供的外部文件读取方式在 PICO 4 Ultra 设备上将失效。此问题提供两种解决方法,按实际情况选取。

解决方法一

此方法更加快捷。若无特殊要求,你可以直接在项目内使用版本小于等于 32 的 Android API。

  1. 在 Unity 编辑器内打开你的项目。
  2. 前往 Edit > Project Settings > Player > Other Settings
  3. Identification 部分,设置 Target API Level 参数,从 API Level 29 至 API Level 32 之间任选其一。

解决方法二

提示: 按照此方法申请权限后,项目内的 Project Validation 配置检测工具仍会报错,可忽略相关报错。

若你仍需要在项目内使用版本大于 32 的 Android API,则需要手动申请 MANAGE_EXTERNAL_STORAGE 权限。该权限无法直接通过 Unity 提供的 Permission.RequestUserPermission() 方法申请,参考以下步骤进行申请:

  1. 在 Unity 编辑器内打开你的项目。
  2. 前往 Project 窗口,然后在 /Assets/Plugins/Android 目录下新建一个 Java 文件。
  3. 在文件中设置包名和类名,并添加一个申请权限的方法。

代码示例如下:

package packageName;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;

public class className {
    private Activity mUnityActivity;
    protected static final String TAG = "mUnityActivity";

    // 必须在 Unity 中调用,以初始化 Activity
    public void setUnityActivity(Activity unityActivity) {
        this.mUnityActivity = unityActivity;
    }

    public void requestExternalStorage() {
        // 申请权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            if (!Environment.isExternalStorageManager()) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                Uri uri = Uri.fromParts("package", mUnityActivity.getPackageName(), null);
                intent.setData(uri);
                mUnityActivity.startActivity(intent);
            } else {
                // 用户已经授予全盘访问权限,可以进行相关操作
            }
        } else {
            // 对于 Android 10 及更低版本,无需单独请求 MANAGE_EXTERNAL_STORAGE 权限
        }
    }
}
  1. 在 Jave 文件中实现方法后,在 Unity 中需要申请权限的部分主动调用相关方法。

以下示例中,应用启动后便申请权限:

...
void RequestStoragePermission()
{
    if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
    {
        Permission.RequestUserPermission(Permission.ExternalStorageWrite);
    }
    if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
    {
        Permission.RequestUserPermission(Permission.ExternalStorageRead);
    }
}
void Awake()
{
    AndroidJavaObject  javaObj = new AndroidJavaObject("packageName.className");
    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    javaObj.Call("setUnityActivity", jo);
    javaObj.Call("requestExternalStorage");
    RequestStoragePermission();
}
...
  1. 前往 Edit > Project Settings > Player > Publishing Settings > Build,勾选 Custom Main Manifest 选框。

\Assets\Plugins\Android 目录下生成 AndroidManifest.xml 文件。

  1. 在 AndroidManifest.xml 文件中添加以下用户权限内容:
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    

标签:API,Ultra,Permission,读写,Settings,Unity,PICO,Android,权限
From: https://blog.csdn.net/weixin_49076427/article/details/144763072

相关文章

  • 【Java并发】读写锁ReadWriteLock
    目录什么是读写锁什么时候使用读写锁怎么使用读写锁 使用步骤1.创建 ReentrantReadWriteLock实例2.获取读锁和写锁3.锁和解锁完整代码使用读写锁的注意事项什么是读写锁ReadWriteLock是Java并发包(java.util.concurrent.locks)中提供的一种锁机制,旨在......
  • redis中,msyql数据库读写分离搭建
    一.mysql读写分离:缓解主服务器的压力 1.概念:主服务器写数据,从服务器读数据 2.实现方法: 客户端分离:开发手动分离地址 服务端分离:数据库与应用之间加一个中间件,分离读写请求 mysql-proxy,mysql-route,maxscale amoeba,cobar,mycat2 atlas,k......
  • 【详解】MySQL主从复制配置,一次性搞定读写分离!
    本文将详细介绍MySQL主从复制的配置过程,包括主库配置、从库配置、主从同步状态监控等内容,帮助你轻松实现数据库的读写分离。一、主从复制简介MySQL主从复制是一个异步的复制过程,通过它可以让一台MySQL服务器(从库)的数据与另一台MySQL服务器(主库)的数据保持同步。1.1主从复制的......
  • qt读写ini文件
    [group1]key1=val1key2=val2sameKay=sameVal[group2]jian1=zhi1jian2=zhi2sameKay=sameZhi 比如创建插入一组ini文件,下面是文件写入的代码;Ini文件的写入ini文件不需要像xml和json一样需要使用QFile打开文件,只需将文件路径及文件格式传入即可(下方代码运行完毕,ini文件则会更新......
  • 【金仓产品知多少】一文带您了解金仓读写分离集群KingbaseES RWC
    产品简介金仓数据库管理系统读写分离集群软件(简称KingbaseESRWC)在金仓数据守护集群软件的基础上增加了对应用透明的读写负载均衡能力。相比数据守护集群,该类集群中所有备库均可对外提供查询能力,从而减轻了主库的读负载压力,可实现更高的事务吞吐率;该软件支持在多个备库间进行......
  • MySQL 主备部署与主库读写分离
    MySQL主备部署与主库读写分离目录概述环境准备主备同步配置主服务器(Master)配置备服务器(Slave)配置主库读写分离常见问题与解决方法总结概述MySQL是一个广泛使用的开源关系型数据库管理系统。为了提高系统的可用性和数据的安全性,通常会采用主备(Master-Slave)架构来部......
  • 用C++实现FILE的读写
    #include<bits/stdc++.h>#include<windows.h>usingnamespacestd;#defineliujunchangreturn#definecode0#definecodes-1namespaceFile{ intOutAndReadFileVoid(constchar*FileNames,constintVoid){ if(Void==-1){ MessageBox(NULL,&q......
  • Parquet存储概述及读写时效对比
    1.Parquet简介Parquet是一种开放的列式存储格式,旨在提高大数据处理和分析的效率。Parquet由Twitter和Cloudera合作开发,并于2015年5月从Apache的孵化器项目毕业,成为Apache的顶级项目。Parquet旨在高效存储和处理大规模数据集,广泛应用于Hadoop、Spark等大数据生态系统。2.Parq......
  • golang的互斥锁和读写锁
    golangmutex(互斥锁)1.锁最本质的作用保证原子性2.mutex使用原则适用于并发编程,尽量减少加锁区域的逻辑3.mutex的局限性仅限于单个进程内操作sema(信号量,semaphore的简称)是一种用于并发控制的机制资源计数:信号量维护一个资源计数。这个计数表示当前可用的资源数量获......
  • stm32读写外部flash失败怎么回事
    STM32读写外部Flash失败可能由多种原因引起,以下是一些常见的问题及其解决方案:一、硬件连接问题SPI接口连接错误:确保STM32的SPI接口与外部Flash的连接正确,包括时钟线(SCK)、数据线(MOSI、MISO)以及片选线(CS)。检查连接是否松动或存在断路。电源和地连接:确保外部Flash......