Einheit: Rufen Sie android-Funktion von Unity
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic("currentActivity");
activity.CallStatic("testMethod");
Dies ist, wie ich call Android-statische Funktion, ohne argument, und es funktioniert perfekt. Aber ich habe Problem, wenn ich versuche zu nennen, die nicht-statische Funktion mit Argumenten.
Ich versuche es so nennen mag:
activity.Call("testMethod", "testString");
Aber Android wirft Ausnahme:
AndroidJavaException: java.lang.NoSuchMethodError: no non-static method "L**myActivity**(Ljava/lang/String;)V"
Was ich falsch mache ? Was ist der Unterschied zwischen statischen und nicht-statischen Aufruf ? Ich bin mit der gleichen Aktivität. Hier ist mein java-Methode:
public void testMethod(String data) { }
UPDATE
War schließlich in der Lage zu laufen, nicht statische Methode:
activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
activity.Call("testMethod", "testString");
}));
Seltsam, dass das nicht funktioniert ohne runOnUIThread...Wahrscheinlich habe ich etwas falsch.
Kann ich sehen, Ihre native android-code? Ich habe das gleiche Problem und ich bin nicht sicher, warum Sie genannt currentActivity
welche technologischen Barrieren steht zwischen uns und einer mehr freundlicher API zu tun?
welche technologischen Barrieren steht zwischen uns und einer mehr freundlicher API zu tun?
InformationsquelleAutor Jim | 2014-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Während Sie vielleicht das Problem, ich glaube das eigentliche Problem liegt woanders. Ich habe mitgeholfen, etliche plugins für die Unity, also ich werde einfach meine Gedanken hier für Sie zu Lesen und für alle anderen, die vielleicht das gleiche oder ähnliche Probleme.
Erstens, Sie haben UIThread zu rufen, Ihre nicht-statische, öffentliche Methode. Das ist völlig in Ordnung, aber nur, wenn die UI-operation durchgeführt wird, in der native code, der zeigt, wie ein toast. Ansonsten, das Problem liegt woanders.
In der Regel, wenn Sie eine Methode erstellen, es wird in eine separate Klasse, die Sie erweitert die
UnityPlayerActivity
. Also für ein Beispiel, sagen wir, Sie haben es genannt "MyClass.java"Dies ist wahrscheinlich, wie Ihre Java-Native-Klasse sieht aus wie
Nativen Android-Code
Nun auf der Unity-Seite, Ihre C# - Skript sollte wie folgt Aussehen
Unity C# - code
Hinweis, wie ich die aktuelle Java-Klasse anstatt des UnityPlayerActivity (d.h. "com.companyName.productName.MyClass" anstatt "com.unity3d.player.UnityPlayer")
Versuchen Sie, den obigen code, es sollte print "Die Daten testString" der logcat.
In Ihrem C# - code, die Sie verwendet haben, die
currentActivity
Feld rufen Sie Ihre Methode.Eher, was Sie tun möchten, ist erstellen eine
AndroidJavaObject
oderAndroidJavaClass
Ihrer Klasse, die Sie erweitertUnityPlayerActivity
("MyClass.java" im Beispiel oben), und rufen Sie Ihre Methoden.InformationsquelleAutor Venkat at Axiom Studios
Sollte es funktionieren. Eigentlich bin ich mit nicht-statische Methode aufrufen, so wie Euch.
Haben, aktualisieren Sie Ihre jar-Datei unter " Assets/Plugins/Android?
InformationsquelleAutor Kazuki Sakamoto
Erklären testMethod(öffentlich) Sie in .jar-Datei?
Wenn Sie nicht deklarieren-Methode, die Sie versuchen zu machen .jar-Datei.
InformationsquelleAutor Ethan Choi