访问和使用Unity Android插件中的图像
本文关键字:插件 图像 Android Unity 访问 | 更新日期: 2023-09-27 18:05:39
正确。。。我以前从未用C#或Java写过任何东西,所以我可能完全错了,这可能是一个简单的答案,但现在。。。
我有一个超简单的Unity应用程序,它只需启动一个android插件。插件需要接受一个文本字符串和一个图像,它将以共享的形式进行共享。
C#
using UnityEngine;
using System.Collections;
public class RunStuff : MonoBehaviour {
AndroidJavaClass androidClass;
AndroidJavaObject androidActivity;
void Start () {
Debug.Log ("----- UNTIY SCRIPT INIT ----- ");
var pathToImage = Application.streamingAssetsPath + "/meagain.jpg";
Debug.Log (pathToImage);
AndroidJNI.AttachCurrentThread ();
androidClass = new AndroidJavaClass("com.something.something.Plugin");
androidActivity = androidClass.GetStatic<AndroidJavaObject>("mContext");
androidActivity.Call("Plugin", pathToImage , "SOME TEST STRING");
Debug.Log ("----- UNTIY SCRIPT END ----- ");
}
}
Java
package com.something.something;
import android.content.Intent;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayerActivity;
public class Plugin extends UnityPlayerActivity {
public static Context mContext;
@Override
protected void onCreate(Bundle bundle)
{
super.onCreate(bundle);
mContext = this;
}
public void Plugin(String imagePath, String message) {
Log.d("TAG", imagePath);
Log.d("TAG", message);
// HERE I NEED TO BE ABLE TO USE THE IMAGE
}
}
所有这些都能正常工作,就像我在java类中接收imagePath和消息一样。。。然而,我根本无法从imagepath中获取图像。
图片在StreamingAssets/meagain.jpg下的Unity项目中。如果我提取生成的apk,我可以看到文件,但我所有的尝试都失败了!
有人有什么想法吗?!!
Texture2D myTex;
string url = "file://"+Application.streamingAssetsPath + "/" + textureName;
WWW www = new WWW(url );
myTex = www.texture;
我知道如何从streamignAssets加载内容的唯一方法。
在你的Android java中,你会使用类似的东西
InputStream in = mContext.getAssets().open("meagain.jpg");
或者
InputStream in = Plugin.class.getClassLoader().getResourceAsStream("meagain.jpg");
两者都没有经过测试,但值得一试!
还做了一些研究:
/* from your subroutine */
Bitmap newBitmap = getBitmapFromAsset(mContext, imagePath);
/* new function to get Bitmap From Asset */
public static Bitmap getBitmapFromAsset(Context context, String imagePath) {
AssetManager assetManager = context.getAssets();
InputStream istr;
Bitmap bitmap = null;
try {
istr = assetManager.open(imagePath);
bitmap = BitmapFactory.decodeStream(istr);
} catch (IOException e) {
// handle exception
}
return bitmap;
}
另外,不要忘记位图、AssetManager、InputStream、BitmapFactory和IOException的导入。