Appearance
好久以前就写过unity调android方法的代码,有一天用到,再写,发现不灵了,看来还是自己理解的不够深刻啊
贴代码,第一种:
c#
private static AndroidJavaClass _helper;
public static AndroidJavaClass helper
{
get
{
if (_helper != null) return _helper;
_helper = new AndroidJavaClass("com.tuyazuo.unityhelper.Unity3dHelper");
//using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
//{
// object jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
// _helper.CallStatic("init", jo);
//}
return _helper;
}
}
unity调用java的 Unity3dHelper类,此类可以不需要继承activity,若没有实列化对象,则只能调用其中的静态方法
贴代码,第二种:
c#
//获取当前activity需在manifest中将.Unity3dHelper配置为主Activity
private static AndroidJavaObject _ajo;
public static AndroidJavaObject ajo
{
get
{
if (_ajo != null) return _ajo;
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
_ajo = jc.GetStatic<AndroidJavaObject>("currentActivity");
return _ajo;
}
}
这种方式需要你的Unity3dHelper继承UnityPlayerActivity,并且需要在manifest配置文件中将Unity3dHelper设置为启动activity,这样unity启动首先会运行Unity3dHelper,这样你可以调用其中的静态 或 非静态方法。
xml
<activity android:name="com.tuyazuo.unityhelper.Unity3dHelper"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="unity" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
</activity>