最近近到个小需求,需要读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文件

在些可添加额外的权限

<?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外部文件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论