gpt4 book ai didi

java - 在自定义 Unity Android 插件上调用非静态方法

转载 作者:行者123 更新时间:2023-12-01 10:03:49 24 4
gpt4 key购买 nike

我试图了解如何为 Android 构建我自己的 Android 插件。

我实现了在我的 Java 类(在 AndroidStudio 上创建的)上调用静态方法,但我真的不能调用非静态方法。

我检查了这些链接:

  • https://answers.unity.com/questions/884503/cant-call-non-static-method-in-androidjavaclass.html
  • http://leoncvlt.com/blog/a-primer-on-android-plugin-development-in-unity/
  • https://answers.unity.com/questions/1327186/how-to-get-intent-data-for-unity-to-use.html
  • how to call Non-static method from Unity Android Plugin?

  • 但没有一个有效。

    我正在尝试从 Unity 的按钮接听电话,例如:
    AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = UnityPlayer.Get<AndroidJavaObject>("currentActivity");
    currentActivity.Call("SayHi");

    我在 Android 上的 Activity 如下所示:
    public class MainActivity extends UnityPlayerActivity {
    private static final String TAG = "LibraryTest";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "Created!");
    }

    public void SayHi()
    {
    Log.d(TAG, "HI_");
    }
    }

    我的亚行正在抛出此消息:
    enter image description here

    我也尝试过调用而不是 UnityPlayer 调用它:
    AndroidJavaClass pluginClass = new AndroidJavaClass("com.example.eric.librarytest.MainActivity");

    编辑:
    这是我的 AndroidManifest.xml
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.eric.librarytest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
    android:minSdkVersion="24"
    android:targetSdkVersion="28" />

    <application android:label="@string/app_name" >
    <activity
    android:name="com.example.eric.librarytest.MainActivity"
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>

    </manifest>

    但也不适用于非静态方法,如果我这样做,它仅适用于静态方法 pluginClass.CallStatic("") , 任何想法?

    编辑 2:
  • Taras Leskiv 建议将 UnityPlayer.Get 更改为
    UnityPlayer.GetStatic,但随后出现以下错误:

    错误:java.lang.NoSuchMethodError:在类 Ljava.lang.Object 中没有名称 ='SayHi' 签名 ='()V' 的非静态方法;
  • Proguard 未激活。
  • 最佳答案

    当你这样做时:

    AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = UnityPlayer.Get<AndroidJavaObject>("currentActivity");
    currentActivity.Call("SayHi");

    它不起作用,因为 currentActivity字段是静态的,你应该做的是:
    AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    currentActivity.Call("SayHi");

    注意 UnityPlayer.GetStatic 部分

    这是我的一个插件中的其他便利 fragment :
        static AndroidJavaObject _activity;

    public static AndroidJavaObject Activity
    {
    get
    {
    if (_activity == null)
    {
    var unityPlayer = new AndroidJavaClass(C.ComUnity3DPlayerUnityPlayer);
    _activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    }
    return _activity;
    }
    }

    关于java - 在自定义 Unity Android 插件上调用非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60383055/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com