当前位置: 首页 > news >正文

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文件

d
在些可添加额外的权限
在这里插入图片描述

<?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”
即可以获得此照片../是上一级目录的意思.

在这里插入图片描述

好啦,此次分享至此结束

http://www.lryc.cn/news/423506.html

相关文章:

  • 【5.3 python中的元组】
  • Debezium报错处理系列之第116篇:Caused by: java.lang.NumberFormatException: null
  • 【启明智显技术分享】工业级HMI芯片Model3C/Model3A开发过程中问题记录笔记二
  • Python 函数返回yield还是return?这是个问题
  • Linux系统性能调优
  • PHPStorm 环境配置与应用详解
  • 前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载
  • 【Qt】QPluginLoader 类学习
  • DataGear 企业版 1.2.0 发布,数据可视化分析平台
  • 为啥https比http慢
  • 软件测试需要具备的基础知识【功能测试】---后端知识(三)
  • 详解 Redis 队列 实现
  • 分析SQL的count(*)并优化
  • Java学习日记(day18)
  • Oracle(61)什么是外部表(External Table)?
  • 物联网HMI/网关搭载ARM+CODESYS实现软PLC+HMI一体化
  • Java中Stream流
  • 纯css实现多行文本右下角最后一行展示全部按钮
  • WPF篇(17)-ListBox列表控件+ListView数据列表控件
  • HAProxy 全解析:驾驭网络负载均衡与高可用的强大引擎
  • 陶瓷材质的防静电架空地板越来越受欢迎的原因
  • Mariadb数据库本机无密码登录的问题解决
  • 校园外卖平台小程序的设计
  • Python3 第八十一课 -- urllib
  • Vue 3+Vite+Eectron从入门到实战系列之(五)一后台管理登录页
  • Docker 网络代理配置及防火墙设置指南
  • 基于PostGIS(Postgres)+Node.js实现的xyz瓦片地图服务器
  • 浙大数据结构慕课课后题(06-图3 六度空间)
  • Windows File Recovery卡在99%怎么解决?实用指南!
  • 数据结构之数组