2015-07-30 2 views
1

Право. Я никогда раньше ничего не писал на C# или Java, поэтому я, вероятно, совершенно не прав во всем этом, и, вероятно, это простой ответ, но здесь идет ...Доступ к изображению в плагине Android Unity

У меня есть ультра простое приложение 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 
    } 
} 

Все это работает правильно, как я получаю ImagePath и сообщение в пределах класса Java ... Но я просто не могу захватить изображение с ImagePath ,

Изображение находится в рамках проекта Unity под StreamingAssets/meagain.jpg. Если я извлечу сгенерированный apk, я могу увидеть файл, но все мои попытки потерпели неудачу!

У кого-нибудь есть идеи? !!

+0

вместо streamingAssets вы можете использовать Application.persistentDataPath + "/" + imageName. – ApolloSoftware

+0

@ApolloSoftware Попытка, чтобы путь оказался неправильным ... и все еще не удалось ... /storage/emulated/0/Android/data/com.something.something/files/meagain.jpg – rich

+0

где точное местоположение jpg, когда вы извлекаете файл? Где на пути? – ApolloSoftware

ответ

0
Texture2D myTex; 
string url = "file://"+Application.streamingAssetsPath + "/" + textureName;  
WWW www = new WWW(url); 
    myTex = www.texture; 

Только способ я знаю, как загрузить материал из streamignAssets.

+0

Это возвращает ошибку для меня: Исключение: JNI: Неизвестная сигнатура для типа UnityEngine.Texture2D (obj = (UnityEngine.Texture2D)) экземпляр – rich

+0

, возможно, попробуйте его только с текстурой тип, а не texture2d. –

+0

Это вызывает ту же ошибку. – rich

0

В вашем 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; 
} 

Также не забудьте импорта для Bitmap, AssetManager, InputStream, BitmapFactory и IOException.

+0

Попробуем попробовать и посмотрим, что получится! – rich

Смежные вопросы