Unity调用Android

1.Unity调用Android

根据unity用户手册,unity能够采用native code(c/c++),可是也提供了C#调用方法,本文对此进行简单讲解。android

2.Unity获取android类

经过下述方法便可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity。继而能够调用MainActivity的静态方法getIntentResult。其返回值为string,若是无返回值,则直接调用CallStatic便可。c++

using (AndroidJavaClass mainActivityClass = new AndroidJavaClass("com.ii.intentreceiver.MainActivity")) { Debug.Log("IntentReceiver start catch infomation"); try { result = mainActivityClass.CallStatic<string>("getIntentResult"); } catch(Exception ex) { Debug.Log("IntentReceiver get result failed:" + ex.Message); } } 

3.Unity获取android类的实例

经过下述方法便可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity的一个实例。继而能够调用MainActivity的方法getResult。其返回值为Android定义的一个实例,因此返回值为AndroidJavaObject类型,若是无返回值,则直接调用Call便可。spa

try { using (AndroidJavaObject main = new AndroidJavaObject("com.ii.intentreceiver.MainActivity",null)) { intentJavaObject = main.Get<AndroidJavaObject>("getResult"); } } catch(AndroidJavaException ex) { Debug.Log("Exception while connecting to the Activity:" + ex.ToString()); return null; } 

3.获取Unity的Activity

便可获取unity的currentActivity3d

private static string unityPlayerClass = "com.unity3d.player.UnityPlayer"; public static AndroidJavaObject GetActivity() { AndroidJavaClass jc = new AndroidJavaClass(unityPlayerClass); if (jc == null) { Debug.LogErrorFormat("Failed to get Unity Player class, {0}", unityPlayerClass); return null; } AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity"); if (activity == null) { Debug.LogError("Failed to obtain Android Activity from Unity Player class."); return null; } return activity; } 

4.Unity获取Android回调结果

4.1 Android定义的接口

此处Android端经过接口来实现的回调code

package com.ii.Manager; public class PluginCallback { public interface ResultCallback { public void OnSuccess(String result, String hint); public void OnError(String result, int errorCode); } } 

Android层方法:orm

package com.ii.Manager; public class Method { public void Execute(PluginCallback.ResultCallback callback){。。。} } 

4.2 Unity定义相应的类

接受回调的类:
此类要继承AndroidJavaProxy,同时根据原Android中的接口定义两个同名的方法。继承

public delegate void SuccessHandler(string result, string hint); public delegate void ErrorHandler(string result, int errorCode); class ExecuteCallback : AndroidJavaProxy { SuccessHandler successHandler; ErrorHandler errorHandler; public InstallApkCallback(SuccessHandler successCallback, ErrorHandler errorCallback) : base("com.ii.Manager.PluginCallback$ResultCallback") { successHandler = successCallback; errorHandler = errorCallback; } public void OnSuccess(string result, string hint) { if (successHandler != null) successHandler(result, hint); } public void OnError(string result, int errorCode) { if (errorHandler != null) errorHandler(result, errorCode); } } 

4.3 Unity使用方法

在new ExecuteCallback(null,null)处填入回调方法。token

AndroidJavaObject jo = new AndroidJavaObject("package com.ii.Manager.Method"); jo.Call("Execute",new ExecuteCallback(null,null));
相关文章
相关标签/搜索