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"?>
<manifest
    xmlns: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 something
                Debug.Log("权限申请全部通过");
            }
        }
    }

    //申请权限被拒绝,且不再询问
    private void OnPermissionDeniedAndDontAskAgain(string permission)
    {
        Debug.Log ($"OnPermissionDeniedAndDontAskAgain:{permission}");
    }

四测试

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

在这里插入图片描述

好啦,此次分享至此结束

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值