Skip to content

好久以前就写过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>
粤ICP备19088787号-1