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;
}