1.Unity调用Android
根据unity用户手册,unity可以采用native code(c/c++),但是也提供了C#调用方法,本文对此进行简单讲解。
通过下述方法即可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity。继而可以调用MainActivity的静态方法getIntentResult。其返回值为string,如果无返回值,则直接调用CallStatic即可。
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); } }
通过下述方法即可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity的一个实例。继而可以调用MainActivity的方法getResult。其返回值为Android定义的一个实例,所以返回值为AndroidJavaObject类型,如果无返回值,则直接调用Call即可。
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; }
即可获取unity的currentActivity
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; }