亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Unity讀取Android外部文件的實(shí)現(xiàn)

 更新時(shí)間:2025年01月14日 08:28:04   作者:小蓋子  
本文主要介紹了Unity讀取Android外部文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近近到個(gè)小需求,需要讀Android件夾中的圖片.在這里做一個(gè)記錄.
首先讀寫部分,這里以圖片為例子:

一讀寫部分

寫入部分:需要注意的是因?yàn)橹挥羞@個(gè)地址支持外部讀寫,所以這里用到的地址都以 :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;
    }

讀取部分:為了方便測(cè)試這里使用了InputFiled組件為了方便隨時(shí)調(diào)整地址:

	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)
                {
                    //加載失敗將加載本地默認(rèn)圖片
                    //callback(Resources.Load(AssetPathConfig.DEFAULT_IMAGE) as Texture2D);
                    //Debug.Log("失敗");
                    Debug.Log("失敗");
                }
            }
            else
            {
                if (www.isDone)
                {
                    if (callback != null)
                    {
                        Debug.Log("成功");
                        callback(www.texture);
                    }
                }
            }
        }
    }

二權(quán)限申請(qǐng)

權(quán)限獲取分為三個(gè)部分
版本設(shè)置需要將Android調(diào)整到較高版本(不一定)

在這里插入圖片描述

外部讀寫設(shè)置然后是將Project Setting > OtherSettings > Write permission 設(shè)置為 Extemal(SDCard)
使用可以方位指定文件夾外的文件

在這里插入圖片描述

權(quán)限配置然后勾選Project Setting > Publishing Settings > Build > Custom Main Manifest
此時(shí)將在自動(dòng)在Plugins 下生成Android/AndroidManifest文件

d

在些可添加額外的權(quán)限

在這里插入圖片描述

<?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>

申請(qǐng)權(quán)限只需要在游戲開始調(diào)用RequestPermissions方法即可完成權(quán)限申請(qǐng)

//申請(qǐng)多個(gè)權(quán)限
    private void RequestPermissions()
    {
        if (m_StringBuilder == null)
        {
            m_StringBuilder = new StringBuilder();
        }
        else
        {
            m_StringBuilder.Clear();
        }
        m_IsGetAllPermission = false;

        //申請(qǐng)回調(diào)
        m_PermissionCallbacks = new PermissionCallbacks();
        m_PermissionCallbacks.PermissionDenied += OnPermissionDenied;
        m_PermissionCallbacks.PermissionGranted += OnPermissionGranted;
        m_PermissionCallbacks.PermissionDeniedAndDontAskAgain += OnPermissionDeniedAndDontAskAgain;

        //申請(qǐng)權(quán)限組
        string[] permissions =
        {
            Permission.ExternalStorageRead,
            Permission.ExternalStorageWrite,
            // 添加其他權(quán)限
        };

        //執(zhí)行申請(qǐng)多個(gè)權(quán)限
        Permission.RequestUserPermissions(permissions, m_PermissionCallbacks);

    }

    //申請(qǐng)權(quán)限被拒絕
    private void OnPermissionDenied(string permission)
    {
        Debug.Log($"OnPermissionDenied:{permission}");
    }

    //申請(qǐng)權(quán)限成功
    /// <param name="permission"></param>
    private void OnPermissionGranted(string permission)
    {
        Debug.Log($"OnPermissionGranted:{permission}");
        //檢查權(quán)限是否全部通過
        if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead) &&
            Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
        {
            //防止多次回調(diào)
            if (!m_IsGetAllPermission)
            {
                m_IsGetAllPermission = true;
                //在這里處理權(quán)限通過的邏輯
                //do something
                Debug.Log("權(quán)限申請(qǐng)全部通過");
            }
        }
    }

    //申請(qǐng)權(quán)限被拒絕,且不再詢問
    private void OnPermissionDeniedAndDontAskAgain(string permission)
    {
        Debug.Log ($"OnPermissionDeniedAndDontAskAgain:{permission}");
    }

三測(cè)試

在這里插入圖片描述

此時(shí)我在手機(jī)根目錄下放一張圖片22.jpg
我們讀取地址 “file:///” + Application.persistentDataPath + “/…/…/…/…/22.jpg”
即可以獲得此照片../是上一級(jí)目錄的意思.

在這里插入圖片描述

到此這篇關(guān)于Unity讀取Android外部文件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Unity讀取Android外部文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論