[Monkey] wie Android Funktionen integrieren?
Übersicht

![]() |
MidimasterBetreff: wie Android Funktionen integrieren? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weiß jemand, wie man Java und Monkey kombiniert? Oder wie man Android Funktionenin Monkey benutzen kann?
Mein konkretes Problem ist, dass ich herausfinden möchte, welche Sprache der User auf seinem Smartphone benutzt. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn es nur um die Sprache geht, ist das sogar recht einfach:
Code: [AUSKLAPPEN] Import mojo
Extern Function GetAndroidLanguage:String() = "Locale.getDefault().getDisplayName" Public Class Language Extends App Field languageCode:String Method OnCreate() languageCode = GetAndroidLanguage() End Method OnRender() Cls DrawText "Sprache: " + languageCode, 10, 10 End End Function Main() New Language End Im Extern-Abschnitt gibt man die Funktionen an, die man in Monkey verwenden möchte. Der Compiler ersetzt dann einen Aufruf der jeweiligen Funktion durch einen Aufruf der im nachfolgenden String angegebenen Funktion. Für komplexere Sachen, die mehr als einen Funktionsaufruf brauchen, erstellt man einfach eine Java-Datei, z.B. "language.java": Code: [AUSKLAPPEN] class Language {
public static String getAndroidLanguage() { return Locale.getDefault().getDisplayName(); } } Um die Funktionen zu benutzen, importiert man die Datei in Monkey und gibt den Namen im Extern-Abschnitt an: Code: [AUSKLAPPEN] Import "language.java"
Extern Function GetAndroidLanguage:String() = "Language.getAndroidLanguage" ... Statt getDisplayName kannst du natürlich auch eine der anderen Funktionen von hier benutzen: http://developer.android.com/r...ocale.html. Mit getLanguage bekommt man z.B. den zweistelligen ISO-Code der Sprache. |
||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Toll! ich bin begeistert. sowas hab ich mich noch nie getraut! Dann brauche ich auch zum ersten mal die Pre-Compiler-Anweisungen:
BlitzMax: [AUSKLAPPEN] Import mojo Vielen Dank nochmal! Da öffnet sich mir ein weites Feld.... |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nun hab ich gedacht, ich hätte das gestern verstanden mit dem Einbinden von Funktionen, aber nun will der Andriod Systemtimer einfach nicht funktionieren:
BlitzMax: [AUSKLAPPEN] Extern Was mache ich falsch? Bei Diddy kriegen die das irgendwie hin: Code: [AUSKLAPPEN] import android.os.Vibrator;
import android.content.Context; import android.location.LocationManager; import android.location.LocationListener; import android.location.Location; import android.app.AlertDialog; import android.widget.EditText; import android.content.DialogInterface; import android.widget.EditText; class diddy { public static Vibrator vibrator; public static LocationManager myManager; public static String latitude = ""; public static String longitude = ""; public static boolean gpsStarted = false; public static AlertDialog.Builder alert; public static EditText input; public static String inputString = ""; static int systemMillisecs() { int ms = (int)System.currentTimeMillis(); return ms; } ..... |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
ChristianK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei dem Java-Funktionsnamen im Extern-Bereich musst du die Klammern hinter System.currentTimeMillis weglassen. Diese Deklarationen geben nur den Funktionsnamen im nativen Code an; den Aufruf (also das Hinzufügen der Klammern) macht der Monkey-Compiler selbst. | ||
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hatte ich auch schon ausprobiert, führte aber zu:
Zitat: -compile:
[javac] Compiling 3 source files to C:\Basic\Monkey\LocaleSprache.build\android\bin\classes [javac] C:\Basic\Monkey\LocaleSprache.build\android\src\com\monkey\MonkeyGame.java:2546: possible loss of precision [javac] found : long [javac] required: int [javac] int t_=System.currentTimeMillis(); [javac] ^ [javac] Note: C:\Basic\Monkey\LocaleSprache.build\android\src\com\monkey\MonkeyGame.java uses unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. [javac] 1 error BUILD FAILED C:\Programme\Android\android-sdk\tools\ant\build.xml:679: The following error occurred while executing this line: C:\Programme\Android\android-sdk\tools\ant\build.xml:692: Compile failed; see the compiler error output for details. ...und da ist es vorbei mit meinem Latein.... Wie gelingt es Diddy, dass der Timer, der eigentlich LONG zurückgibt. letztendlich als INT an Monkey durchgereicht werden kann? Auch wenn ich den JAVA-Teil in eine eigene Datei ausgliedere und über IMPORT wieder einbinde will es nicht gelingen: BlitzMax: [AUSKLAPPEN] class SystemPeter { BlitzMax: [AUSKLAPPEN] Import mojo es endet mit der selben Fehlermeldung. Und dabei sieht es doch jetzt schon genauso aus, wie bei Diddy... [*** EDIT ***] ich glaub ich hab's!!! Der castet das nach INT! BlitzMax: [AUSKLAPPEN] Int ms =(Int)System.currentTimeMillis(); dieses (int) scheint sowas wie casten zu sein!!! Juhu! Nun läuft es, aber ich hab das Problem, das der Timer rückwärts aus dem negativen Bereich kommend Richtung 0 zählt. Also mach ich es so mit MODULO: BlitzMax: [AUSKLAPPEN] class SystemPeter { |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group