Bezeichnung
CallJavaMethod -- ruft die Methode der Java-Aktivität auf (V8.0)
Übersicht
[ret] = CallJavaMethod(name$[, t, type1, value1, type2, value2, ...])
Plattformen
Nur Android

Beschreibung
Dies ist ein leistungsstarker Befehl, mit der Sie direkt in den Java-Code von Hollywoods Android-Aktivitäten zugreifen können. Der Java-Code kann dann auf die gesamte Android-API zugreifen, um Ihre App mit benutzerdefinierten Funktionen zu verbessern, die in Hollywood nicht verfügbar sind.

Sie müssen den Namen der aufzurufenden Methode im Argument name$ übergeben. Beachten Sie, dass Java eine von Groß- und Kleinschreibung abhängige Sprache ist, daher muss der Methodenname, den Sie in name$ übergeben, genau mit seiner Definition im Java-Code übereinstimmen.

Optional können Sie im zweiten Argument eine Tabelle übergeben. Diese Tabelle unterstützt derzeit die folgenden Tags:

Static:
Setzen Sie diese Option auf True, wenn die Methode, die Sie aufrufen möchten, statisch ist. Standardmäßig erwartet CallJavaMethod(), dass die Methode nicht statisch ist.

ReturnType:
Mit diesem Tag konfigurieren Sie den Rückgabedatentyp der Methode, welche Sie in name$ übergeben haben. Dies muss eine der folgenden vordefinierten Konstanten sein:

#BYTE:
Javas Datentyp byte, eine signierte 8-Bit-Größe.
#SHORT:
Javas Datentyp short, eine signierte 16-Bit-Größe.
#INTEGER:
Javas Datentyp int, eine signierte 32-Bit-Größe.
#FLOAT:
Javas Datentyp float, eine 32-Bit-Fließkommazahl.
#DOUBLE:
Javas Datentyp double, eine 64-Bit-Fließkommazahl.
#BOOLEAN:
Javas Datentyp boolean, ein boolescher Wert (True oder False).
#STRING:
Javas Datentyp String, eine Zeichenkette
#VOID:
Kein Rückgabewert.

Der Standardwert von diesem Tags ist #VOID, d.h. die Methode gibt keinen Wert zurück.

ReturnArray:
Wenn dieser Tag auf True gesetzt ist, wird erwartet, dass die in name$ übergebene Methode ein Array des in ReturnType angegebenen Datentyps zurückgibt. Wenn ReturnArray auf True gesetzt ist, darf ReturnType nicht auf #VOID gesetzt sein. Der Standardwert ist False.

Nach dem optionalen Tabellenargument akzeptiert CallJavaMethod() eine unbegrenzte Anzahl von type- und value-Paaren. Diese Paare können verwendet werden, um Parameter an die in name$ angegebene Methode zu übergeben. Für jeden type muss direkt ein entsprechendes value-Argument vorhanden sein.

Die folgenden vordefinierten Konstanten werden derzeit für das Argument type unterstützt:

#BYTE:
Javas Datentyp byte, eine signierte 8-Bit-Größe.
#SHORT:
Javas Datentyp short, eine signierte 16-Bit-Größe.
#INTEGER:
Javas Datentyp int, eine signierte 32-Bit-Größe.
#FLOAT:
Javas Datentyp float, eine 32-Bit-Fließkommazahl.
#DOUBLE:
Javas Datentyp double, eine 64-Bit-Fließkommazahl.
#BOOLEAN:
Javas Datentyp boolean, ein boolescher Wert (True oder False).
#STRING:
Javas Datentyp String, eine Zeichenkette
#VOID:
Kein Rückgabewert.

Der Wert, der jedem Argument type folgt, muss dem für diesen Parameter angegebenen Typ entsprechen, z.B. wenn Sie in einem Argument type #STRING übergeben, muss nach dem Argument #STRING eine Zeichenkette folgen.

Hier ist ein Beispiel für eine Java-Methode:

 
public int littleTest(String s, int v) {
    Log.v("Test", "Got data: " + s + " " + v);
    return 50;
}

Beachten Sie, dass es wichtig ist, die Methode mit dem Schlüsselwort public zu definieren, da auf sie außerhalb ihrer Klasse zugegriffen wird. Um die Java-Methode littleTest() von Ihrem Hollywood-Skript mit CallJavaMethod() aufzurufen, müssen Sie den folgenden Code verwenden:

 
r = CallJavaMethod("littleTest", {ReturnType = #INTEGER},
        #STRING, "Hello Java!", #INTEGER, 10)

Da die Java-Methode als Ganzzahlwert deklariert wurde und die Implementierung auf der Java-Seite 50 ergibt, wird die Hollywood-Variable r auf 50 gesetzt, sobald CallJavaMethod() beendet wird.

Beachten Sie, dass diese Funktion nur in Verbindung mit dem Hollywood APK Compiler verwendet werden kann, da der Hollywood-Player Ihnen nicht erlaubt, benutzerdefinierten Code in seine Aktivität einzufügen. Dies wird nur vom Hollywood APK Compiler unterstützt.

Die Java-Methoden, die Sie definieren, sind Teil einer Unterklasse von Hollywoods Android-Activity. Sie können also jede der Activity-Methoden direkt aus den von CallJavaMethod() aufgerufenen Methoden aufrufen. Beachten Sie jedoch, dass von CallJavaMethod() ausgeführte Java-Methoden nicht im Haupt-UI-Thread, sondern im VM-Thread von Hollywood ausgeführt werden. Wenn Sie also auf Android-APIs zugreifen müssen, die nur über den UI-Thread aufgerufen werden können (wie die meisten View-bezogenen APIs), müssen Sie zuerst vom Hollywood-Thread an den Haupt-Thread delegieren. Andernfalls funktioniert der Code nicht.

Eingaben
name$
Name der aufzurufenden Methode
t
optional: Tabelle mit weiteren Optionen (siehe oben)
type1
optional: Typ des ersten Parameters, der an die Methode übergeben wird (mögliche Werte siehe oben)
value1
optional: Wert des ersten Parameters
...
optional: unbegrenzte Anzahl von weiteren Methodenparametern
Rückgabewerte
ret
optional: falls ReturnType nicht #VOID ist, ist das der von der Java-Methode zurückgegebene Wert

Navigation zeigen