Unity读取Android SDcard文件

一、添加权限

权限添加 :Player settings -- Other settings -- write permission的设置 Sdcard。这个是在Unity编辑器里打包的情况。

如果导出到studio 里面的话,可自行修改Manifest文件。

二、两种方式

IO方式 加载sdcard上的图片资源

加载的  /storage/emulated/0/ProjectName/image.jpg,

image = this.GetComponentInChildren<Image>();  

      Debug.Log("IO加载用时: image = this.GetComponent<Image> ==========  " + image);  

      Debug.Log("IO加载:  Application.dataPath "  + Application.dataPath );
      // Application.dataPath /data/app/com.putao.ptx.core-1/base.apk  

      Debug.Log("IO加载:  Application.persistentDataPath " + Application.persistentDataPath);
      // Application.persistentDataPath /storage/emulated/0/Android/data/com.putao.ptx.core/files   

      Debug.Log("IO加载:GameObject.Find" + GameObject.Find("Canvas/Avator").GetComponent<Image>());  

       // /data/user/0/com.putao.paichallenge/cache/20170524_130527.jpg  

      // path =======  "/storage/emulated/0/ProjectName/image.jpg"
      FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
      fileStream.Seek(0, SeekOrigin.Begin);
      //创建文件长度缓冲区
      byte[] bytes = new byte[fileStream.Length];
      //读取文件
      fileStream.Read(bytes, 0, (int)fileStream.Length);
      //释放文件读取流
      fileStream.Close();
      fileStream.Dispose();
      fileStream = null;  

      //创建Texture
      int width = 300;
      int height = 372;
      Texture2D texture = new Texture2D(width, height);
      texture.LoadImage(bytes);  

      //创建Sprite
      Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width,texture.height), new Vector2(0.5f, 0.5f));  

      image.sprite = sprite;

log上可以看出来  android上 getExternalFilesDir("") 和 Unity里面的Application.persistentDataPath是一致的

/storage/emulated/0/Android/data/com.putao.ptx.core/files

WWW方式加载本地图片

url=  "file://"+ "/storage/emulated/0/ProjectName/image.jpg"

根本不是加"jar:file://..."

public void LoadByWWW(String path)
    {
        StartCoroutine(doLoadByWWW(path));  

    }  

    IEnumerator doLoadByWWW(String path)
    {
        string url = "file://" + "/storage/emulated/0/PaiChallenge/image.jpg";
        Debug.Log("doLoadByWWW == url ==================   " + url);  

        WWW w = new WWW(url);  

        yield return w;  

        if (w.isDone)
        {
            Sprite sprite = Sprite.Create(w.texture, new Rect(0, 0, w.texture.width, w.texture.height), new Vector2(0.5f, 0.5f));  

            GameObject.Find("Canvas/Avator").GetComponent<Image>().sprite = sprite;  

        }

  

时间: 2024-10-12 15:42:48

Unity读取Android SDcard文件的相关文章

二十、Android -- SDcard文件读取和保存

背景                                                                                            一些东西可以存在自己定义的文件里面,这个文件可以在手机中,可以在SD卡中,在这里就主要介绍一下在SD卡中的存储和读取吧~ 代码                                                                                            

Android–SDcard文件读取和保存

背景                                                                                            一些东西可以存在自己定义的文件里面,这个文件可以在手机中,可以在SD卡中,在这里就主要介绍一下在SD卡中的存储和读取吧~ 代码                                                                                            

读取Android APK文件签名的方法

在微信开放平台等申请API key 和secret时经常要用到apk文件签名,那么如何读取呢? 下面贴一下相关读取源码: 一共两个文件MainActivity和MD5, package com.lcg.gensinature; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; imp

读取Android资源文件

读取Assets文件夹 InputStream is = getAssets().open("read_asset.txt"); // We guarantee that the available method returns the total // size of the asset... of course, this does mean that a single // asset can't be more than 2 gigs. int size = is.availa

c# unity 读取配置json文件

using System; using LitJson; string configStr; void Start() { ArrayList info = LoadFile(Application.dataPath,"config1.txt"); foreach (string strs in info) { configStr += strs; } // string str = @" // { // ""Speed"" : 2 /

Unity编译Android的原理解析和apk打包分析

作者介绍:张坤 最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用Android的部分原理进行了研究. 本文主要探讨Scene和Activity之间的关系,以及Unity打包apk和Android studio打包apk的差别在什么地方?找到这种差别之后,可以怎么运用起来? 本文需要用到的工具: Android反编译工具--apktool Android studio自带的反编译功能 一.

Unity读取Excel文件(附源代码)

今天想弄个Unity读取Excel的功能的,发现网上有许多方法,采用其中一种方法:加入库文件 Excel.dll 和ICSharpCode.SharpZipLib.dll库文件,(还有System.Data.dll也要拷贝进来,在Unity安装路径C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity中),代码下载链接在最后. 使用时要注意1997-2003和2007版本的脚本不一样: 然后编写脚本DoExcel.cs: using Syst

android之文件操作——读取assets和raw文件下的内容

1.分别创建assets文件夹和res/raw文件夹:(要注意的raw文件是在res下new,然后创建一个名字为raw的文件夹)        2.创建两个txt文件,复制到asset和raw文件夹中: 3.实现的效果: 4.实现代码: (1)布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.androi

【转】Android SDCard操作(文件读写,容量计算)

android.os.Environment 提供访问环境变量 java.lang.Object     android.os.Environment   Environment 静态方法: 方法 : getDataDirectory () 返回 : File 解释 : 返回Data的目录 方法 : getDownloadCacheDirectory () 返回 : File 解释 : 返回下载缓冲区目录 方法 : getExternalStorageDirectory () 返回 : File