it编程 > App开发 > Android

Unity读取Android外部文件的实现

50人参与 2025-02-13 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”
即可以获得此照片../是上一级目录的意思.

在这里插入图片描述

到此这篇关于unity读取android外部文件的实现的文章就介绍到这了,更多相关unity读取android外部文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Android四种方式刷新View的操作方法

02-13

Android 系统签名 keytool-importkeypair的操作步骤

02-13

Android实现图片裁剪处理的操作步骤

02-13

Android13实时刷新频率的实现代码(完整代码)

02-13

Android使用WebView加载播放视频流及实现相关功能

02-13

android聊天界面键盘、表情切换丝滑实现的具体思路

02-13

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论