Unity读取Android外部文件
最近近到个小需求,需要读Android件夹中的图片.在这里做一个记录.
首先读写部分,这里以图片为例子:
一读写部分
写入部分:
需要注意的是因为只有这个地址支持外部读写,所以这里用到的地址都以 :Application.persistentDataPath为地址起始.
private Texture2D __CaptureCamera(){RenderTexture rt = m_renGet;RenderTexture.active = rt;Texture2D screenShot = new Texture2D(256, 256, TextureFormat.RGB24, false);screenShot.ReadPixels(new Rect(0, 0, 256, 256), 0, 0);screenShot.Apply();byte[] bytes = screenShot.EncodeToPNG();string filename = Application.persistentDataPath + "/House1.jpg";System.IO.File.WriteAllBytes(filename, bytes);return screenShot;}
读取部分:
为了方便测试这里使用了InputFiled组件为了方便随时调整地址:
private void __On3(){input.text = Application.persistentDataPath;string path = "file:///" + input.text;StartCoroutine(LoadImage(path, bb));}private void bb(object obj){Texture2D tex = obj as Texture2D;rw.texture = tex;}public IEnumerator LoadImage(string path, Action<object> callback){Debug.Log("读取地址:"+path);using (WWW www = new WWW(path)){yield return www;if (www.error != null){if (callback != null){//加载失败将加载本地默认图片//callback(Resources.Load(AssetPathConfig.DEFAULT_IMAGE) as Texture2D);//Debug.Log("失败");Debug.Log("失败");}}else{if (www.isDone){if (callback != null){Debug.Log("成功");callback(www.texture);}}}}}
二权限申请
权限获取分为三个部分
版本设置
需要将Android调整到较高版本(不一定)

外部读写设置
然后是将Project Setting > OtherSettings > Write permission 设置为 Extemal(SDCard)
使用可以方位指定文件夹外的文件
权限配置
然后勾选Project Setting > Publishing Settings > Build > Custom Main Manifest
此时将在自动在Plugins 下生成Android/AndroidManifest文件

在些可添加额外的权限

<?xml version="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.unity3d.player"xmlns:tools="http://schemas.android.com/tools"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><application><activity android:name="com.unity3d.player.UnityPlayerActivity"android:theme="@style/UnityThemeSelector"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application>
</manifest>
申请权限
只需要在游戏开始调用RequestPermissions方法即可完成权限申请
//申请多个权限private void RequestPermissions(){if (m_StringBuilder == null){m_StringBuilder = new StringBuilder();}else{m_StringBuilder.Clear();}m_IsGetAllPermission = false;//申请回调m_PermissionCallbacks = new PermissionCallbacks();m_PermissionCallbacks.PermissionDenied += OnPermissionDenied;m_PermissionCallbacks.PermissionGranted += OnPermissionGranted;m_PermissionCallbacks.PermissionDeniedAndDontAskAgain += OnPermissionDeniedAndDontAskAgain;//申请权限组string[] permissions ={Permission.ExternalStorageRead,Permission.ExternalStorageWrite,// 添加其他权限};//执行申请多个权限Permission.RequestUserPermissions(permissions, m_PermissionCallbacks);}//申请权限被拒绝private void OnPermissionDenied(string permission){Debug.Log($"OnPermissionDenied:{permission}");}//申请权限成功/// <param name="permission"></param>private void OnPermissionGranted(string permission){Debug.Log($"OnPermissionGranted:{permission}");//检查权限是否全部通过if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead) &&Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite)){//防止多次回调if (!m_IsGetAllPermission){m_IsGetAllPermission = true;//在这里处理权限通过的逻辑//do somethingDebug.Log("权限申请全部通过");}}}//申请权限被拒绝,且不再询问private void OnPermissionDeniedAndDontAskAgain(string permission){Debug.Log ($"OnPermissionDeniedAndDontAskAgain:{permission}");}
四测试

此时我在手机根目录下放一张图片22.jpg
我们读取地址 “file:///” + Application.persistentDataPath + “/…/…/…/…/22.jpg”
即可以获得此照片../是上一级目录的意思.

好啦,此次分享至此结束
相关文章:
Unity读取Android外部文件
最近近到个小需求,需要读Android件夹中的图片.在这里做一个记录. 首先读写部分,这里以图片为例子: 一读写部分 写入部分: 需要注意的是因为只有这个地址支持外部读写,所以这里用到的地址都以 :Application.persistentDataPath为地址起始. private Texture2D __CaptureCamera…...
【5.3 python中的元组】
5.3 python中的元组 Python中的元组(Tuple)是一种用于存储多个项目(可以是不同类型)的序列数据结构,但它与列表(List)不同,主要区别在于元组是不可变的(immutable&#…...
Debezium报错处理系列之第116篇:Caused by: java.lang.NumberFormatException: null
Debezium报错处理系列之第116篇:Caused by: java.lang.NumberFormatException: null 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezium技术遇到的…...
【启明智显技术分享】工业级HMI芯片Model3C/Model3A开发过程中问题记录笔记二
一、Model3C/Model3A芯片介绍 Model3C/Model3A是启明智显针对工业、行业以及车载产品市场推出的一款高性能、低成本的工业级HMI(Human-Machine Interface,人机界面)芯片。两颗芯片硬件PIN TO PIN;区别在于内置的PSRAM大小不同。该…...
Python 函数返回yield还是return?这是个问题
如果你刚入门 Python,你可能之前没有遇到过yield。虽然它看起来很奇怪,但它是你编码工具库中的一个重要工具。在成为 Python 大师的道路上,你必须掌握它。 返回列表的函数 假设有一个函数,它可以一次性生成一系列值,…...
Linux系统性能调优
Linux系统性能调优是一个复杂而细致的过程,涉及硬件、软件、内核参数、进程管理等多个方面。以下将从多个角度详细介绍Linux系统性能调优的技巧,旨在帮助用户提升系统的运行效率和稳定性。 一、硬件层面的调优 内存升级: 增加物理内存可以减…...
PHPStorm 环境配置与应用详解
大家好,我是程序员小羊! 前言: PHPStorm 是 JetBrains 出品的一款专业 PHP 集成开发环境(IDE),凭借其智能的代码补全、调试功能、深度框架支持和前端开发工具,为用户提供了丰富的功能和工具…...
前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载
前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载 各种文本文件预览(pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件) 其中 除p…...
【Qt】QPluginLoader 类学习
文章目录 一、简介二、常用方法2.1 构造函数2.2 动态加载方法——load()2.3 检查是否加载成功——isLoaded()2.4 访问插件中的根组件——instance()2.5 卸载插件——unload() 一、简介 QPluginLoader 类在运行时加载插件。 QPluginLoader 提供对Qt插件的访问。Qt插件存储在共享…...
DataGear 企业版 1.2.0 发布,数据可视化分析平台
DataGear 企业版 1.2.0 已发布,欢迎体验! http://datagear.tech/pro/ 企业版 1.2.0 修复严重漏洞,新增文件源管理模块,新增JWT统一登录支持,MQTT数据集主题支持通配符,具体更新内容如下: 新增…...
为啥https比http慢
Https有ssl的握手 HTTP没有 HTTPS TCP 和HTTP 的TCP 时间差不是很大 HTTPS请求中,ssl所占的时间比例是请求时间总和93.37%, HTTPS请求中,ssl的请求会是tcp请求的14倍,而HTTP中没有这个问题 建议:对安全要求不是很高的,不要使用https请求 图例...
软件测试需要具备的基础知识【功能测试】---后端知识(三)
您好,我是程序员小羊! 前言 为了更好的学习软件测试的相关技能,需要具备一定的基础知识。需要学习的基础知识包括: 1、计算机基础 2、前端知识 3、后端知识 4、软件测试理论 后期分四篇文章进行编写,这是第三篇 …...
详解 Redis 队列 实现
Redis 是一个高性能的键值存储系统,它的多种数据结构使其能够以不同方式实现队列,包括普通队列、延时队列和异步队列的介绍和示例。 介绍 Redis 的 List 数据结构可以用来实现普通的队列。 生产者使用 LPUSH 或 RPUSH 命令将消息添加到列表的头部或尾部…...
分析SQL的count(*)并优化
最近优化过几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,希望对你会有所帮助。 我们使用的数据库是Mysql8,使用的存储引擎是Innodb。这次优化除了优化索引之外,更多的是在优化count(*)。 通常情况下&#…...
Java学习日记(day18)
一、软件的结构 C/S (Client - Server 客户端-服务器端) 典型应用:QQ软件 ,飞秋,印象笔记。 特点: 必须下载特定的客户端程序。服务器端升级,客户端升级。 B/S (Broswer -Server 浏览器端- 服务器端&a…...
Oracle(61)什么是外部表(External Table)?
外部表(External Table)是Oracle数据库中的一种特殊表类型,用于访问存储在外部文件系统中的数据,而不需要将数据实际加载到数据库内部。外部表的主要优势在于允许数据库用户在不移动或复制数据的情况下,直接查询和处理…...
物联网HMI/网关搭载ARM+CODESYS实现软PLC+HMI一体化
物联网HMI/网关搭载CODESYS实现软PLCHMI一体化 硬件:ARM平台,支持STM32/全志T3/RK3568/树莓派等平台 软件:CODESYS V3.5、JMobile Studio CODESYS是一款功能强大的PLC软件编程工具,它支持IEC61131-3标准IL、ST、FBD、LD、CFC、…...
Java中Stream流
Java中Stream流 Stream 使用flatMap处理嵌套集合: 有一个对象列表,每个对象又包含一个列表,可以使用flatMap来“展平”这个结构。 List<List<String>> listOfLists Arrays.asList(Arrays.asList("a", "b"),Arrays.a…...
纯css实现多行文本右下角最后一行展示全部按钮
未展开全部: 展开全部: 综上演示按钮始终保持在最下方 css代码如下: <div class"info-content"><div class"info-text" :class"!showAll ? mle-hidden : "><span class"show-all"…...
WPF篇(17)-ListBox列表控件+ListView数据列表控件
ListBox列表控件 ListBox是一个列表控件,用于显示条目类的数据,默认每行只能显示一个内容项,当然,我们可以通过修改它的数据模板,来自定义每一行(元素)的数据外观,达到显示更多数据…...
从CNN到Mamba:为什么这个轻量级双分支结构在医学图像分类中表现更好?
从CNN到Mamba:轻量级双分支结构如何重塑医学图像分类范式 医学影像分析正面临前所未有的挑战——随着CT、MRI、超声等成像技术的普及,每天产生的医学图像数据呈指数级增长。传统CNN架构在应对高分辨率医学图像时,往往陷入局部特征提取的局限&…...
「码动四季·开源同行」go语言:统一认证与授权如何保障服务安全
认证与授权对于当前的互联网应用是非常重要的基础功能:认证用于验证当前用户的身份,而授权意味着用户在认证成功后,会被系统授予访问系统资源的权限。只有具备相应身份和权限的人才能访问系统中的相应资源,比如在购物网站中你只能…...
MXene基单原子催化剂在电催化CO2还原中的电子结构调控与性能优化
1. MXene基单原子催化剂为何能成为CO2还原的"黑马"? 在碳中和背景下,电催化CO2还原技术就像一位"化学魔术师",能把温室气体变废为宝。而MXene材料凭借其独特的层状结构和导电性,正成为这场魔术表演的明星道具…...
如何高效使用猫抓插件:浏览器资源嗅探实用指南
如何高效使用猫抓插件:浏览器资源嗅探实用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代,我们每天浏览网…...
如何用OpenShamrock打造智能QQ机器人:从零开始的完整指南
如何用OpenShamrock打造智能QQ机器人:从零开始的完整指南 【免费下载链接】OpenShamrock A Bot Framework based on Xposed with OneBot11 项目地址: https://gitcode.com/gh_mirrors/op/OpenShamrock OpenShamrock是一款基于Xposed框架实现的QQ机器人开发工…...
避坑指南:pyzbar识别模糊二维码的5种图像预处理技巧(Python+OpenCV)
提升pyzbar识别率:5种图像预处理技术解决模糊二维码难题 1. 模糊二维码识别的核心挑战 在现实应用中,二维码识别经常遇到各种图像质量问题。我曾在一个物流仓储项目中亲眼目睹,由于包装反光和运输磨损,标准识别流程的失败率高达40…...
告别数学恐惧:用Python可视化单相PWM整流器的dq变换过程
用Python动画拆解单相PWM整流器的坐标变换魔法 1. 从交流到直流的控制艺术 当我们面对单相PWM整流器的控制问题时,最令人着迷的挑战莫过于如何将交流系统中的正弦量转化为适合控制的直流量。这就像是要在汹涌的交流海浪中建造一个稳定的直流岛屿。传统三相系统可以…...
从信息收集到密码爆破:如何用DictGenerate定制你的专属社工字典?
从信息收集到密码爆破:如何用DictGenerate定制你的专属社工字典? 在授权渗透测试和安全评估中,社会工程学攻击往往是最难防御的一环。攻击者通过收集目标的个人信息,精心构造符合目标习惯的密码字典,能够显著提高暴力…...
3分钟快速上手BewlyBewly:打造你的专属B站美化体验
3分钟快速上手BewlyBewly:打造你的专属B站美化体验 【免费下载链接】BewlyBewly Just make a few small changes to your Bilibili homepage. (English | 简体中文 | 正體中文 | 廣東話) 项目地址: https://gitcode.com/gh_mirrors/be/BewlyBewly 你是否厌倦…...
Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用
Qwen All-in-One场景解析:如何用轻量模型赋能边缘计算应用 1. 引言:当边缘计算遇上大模型 想象一下,在一个智能工厂的质检工位上,摄像头捕捉到产品表面的微小瑕疵。传统的做法是:将图像上传到云端服务器,…...
