Anfängerprobleme mit Java für Android Extensions

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anfängerprobleme mit Java für Android Extensions

    Hallo Leute,

    ich möchte eine Extension für Android schreiben.

    ​Folgendes Extension-Beispiel: help.yoyogames.com/hc/en-us/ar…ion-For-Android-GMS-v1-3-

    funktioniert gut.

    Ich habe mir auch schon andere Beispiel angeschaut.

    ​Wie muss man Google-API-Aufrufe richtig für GM programmieren.

    ​Kann es sein das man am besten Services, bzw. Intent's nutzen sollte.

    Ich versuche die Google Tts anzusprechen.

    So funktioniert das z.B nicht:

    Java-Quellcode

    1. package ${YYAndroidPackageName};
    2. import android.util.Log;
    3. import android.app.Activity;
    4. import android.os.Bundle;
    5. import android.speech.tts.TextToSpeech;
    6. import android.speech.tts.TextToSpeech.OnInitListener;
    7. import java.io.File;
    8. import java.io.FileReader;
    9. import java.io.BufferedReader;
    10. import java.io.FileNotFoundException;
    11. import java.io.IOException;
    12. import java.lang.String;
    13. import ${YYAndroidPackageName}.R;
    14. import com.yoyogames.runner.RunnerJNILib;
    15. public class andro_tts
    16. {
    17. TextToSpeech tts;
    18. public andro_tts()
    19. {
    20. tts=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
    21. @Override
    22. public void onInit(int status) {
    23. if(status != TextToSpeech.ERROR) {
    24. tts.setLanguage(Locale.GERMAN);
    25. }
    26. }
    27. });
    28. }
    29. public double add_number(double arg0, double arg1)
    30. {
    31. double value = arg0 + arg1;
    32. Log.i("yoyo", arg0 + "+" + arg1 + " = " + value);
    33. return value;
    34. }
    35. public String build_string(String arg0, String arg1)
    36. {
    37. String myString = arg0 + " " + arg1;
    38. Log.i("yoyo", myString);
    39. return myString;
    40. }
    41. public double tts_speak(String arg0)
    42. {
    43. tts.speak(arg0, TextToSpeech.QUEUE_FLUSH, null);
    44. return 0;
    45. }
    46. }
    Alles anzeigen


    und so auch nicht:

    Java-Quellcode

    1. package ${YYAndroidPackageName};
    2. import android.util.Log;
    3. import android.app.Activity;
    4. import android.os.Bundle;
    5. import android.speech.tts.TextToSpeech;
    6. import android.speech.tts.TextToSpeech.OnInitListener;
    7. import java.io.File;
    8. import java.io.FileReader;
    9. import java.io.BufferedReader;
    10. import java.io.FileNotFoundException;
    11. import java.io.IOException;
    12. import java.lang.String;
    13. import ${YYAndroidPackageName}.R;
    14. import com.yoyogames.runner.RunnerJNILib;
    15. public class andro_tts implements OnInitListener
    16. {
    17. private TextToSpeech tts;
    18. public andro_tts()
    19. {
    20. tts = new TextToSpeech(this, this);
    21. }
    22. public double add_number(double arg0, double arg1)
    23. {
    24. double value = arg0 + arg1;
    25. Log.i("yoyo", arg0 + "+" + arg1 + " = " + value);
    26. return value;
    27. }
    28. public String build_string(String arg0, String arg1)
    29. {
    30. String myString = arg0 + " " + arg1;
    31. Log.i("yoyo", myString);
    32. return myString;
    33. }
    34. @Override
    35. public void onInit(int arg0)
    36. {
    37. tts.setLanguage(Locale.GERMAN);
    38. }
    39. public double tts_speak(String arg0)
    40. {
    41. tts.speak(arg0, TextToSpeech.QUEUE_FLUSH, null);
    42. return 0;
    43. }
    44. }
    Alles anzeigen


    ​Mit Intent's komme ich jetzt nicht weiter:

    Java-Quellcode

    1. package ${YYAndroidPackageName};
    2. import android.util.Log;
    3. import android.app.Activity;
    4. import android.os.Bundle;
    5. import android.speech.tts.TextToSpeech;
    6. import android.speech.tts.TextToSpeech.OnInitListener;
    7. import java.io.File;
    8. import java.io.FileReader;
    9. import java.io.BufferedReader;
    10. import java.io.FileNotFoundException;
    11. import java.io.IOException;
    12. import java.lang.String;
    13. import ${YYAndroidPackageName}.R;
    14. import com.yoyogames.runner.RunnerJNILib;
    15. public class andro_tts implements OnInitListener {
    16. private TextToSpeech mTts;
    17. public double tts_speak(String txt)
    18. {
    19. Intent checkIntent = new Intent();
    20. checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    21. startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
    22. mTts.speak(txt, TextToSpeech.QUEUE_FLUSH, null);
    23. return 0;
    24. }
    25. protected void onActivityResult(int requestCode, int resultCode, Intent data)
    26. {
    27. if (requestCode == MY_DATA_CHECK_CODE) {
    28. if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
    29. mTts = new TextToSpeech(this, this);
    30. } else {
    31. Intent installIntent = new Intent();
    32. installIntent.setAction(
    33. TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
    34. startActivity(installIntent);
    35. }
    36. }
    37. }
    38. }
    Alles anzeigen


    ​Ich bekomme das hier nicht so ganz hin:
    android-developers.googleblog.…to-text-to-speech-in.html

    ​Kennt sich da jemand aus?
  • Also fehlt da nicht noch sowas wie

    GML-Quellcode

    1. if (mTts.isLanguageAvailable(Locale.US)) {
    2. mTts.setLanguage(Locale.US);
    3. }


    Wenn ich dem ganzen das richtig entnehme Musst du erstmal eine Sprache definieren. Würde auch nur Sinn machen.
    Ansonsten sollte dein Letzter Code dann eigentlich funktionieren.

    Wenn nicht wäre es gut zu wissen was der Code denn überhaupt bis jetzt macht/nicht macht
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Hallo Rhazul ,

    ​also da liegst du falsch.

    Die Methode setLanguage​ der TextToSpeech - Klasse muss man nicht nutzen. (Ich nutze sie aber.)

    Wie man Android-Apps mit Java schreibt weiß ich im Allgemeinen.

    ​Die oberen Klassen funktionieren mit einer Activity-Klasse, aber wie macht man das als eine Art Bibliothek für GM-Studio.

    ​So etwas wie das hier funktioniert z.B mit einem Layout als XML-Datei problemlos Standalone als App-Konstrukt.

    Quellcode

    1. package de.meine_app.Hallo;
    2. import android.app.Activity;
    3. import android.os.Bundle;
    4. import android.speech.tts.TextToSpeech;
    5. import android.speech.tts.TextToSpeech.OnInitListener;
    6. public class Hallo extends Activity implements OnInitListener { //Klassennamen sollten (müssen aber nicht) großgeschrieben werden
    7. //TextToSpeech benötigt einen OnInitListener
    8. private TextToSpeech tts;
    9. @Override //Überschreibt die Elternmethode
    10. protected void onCreate(Bundle savedInstanceState)
    11. {
    12. super.onCreate(savedInstanceState); //ruft die Elternklasse auf
    13. setContentView(R.layout.main) //main ist das xml-Layout
    14. tts = new TextToSpeech(this, this);
    15. }
    16. @Override
    17. public void onInit(int arg0)
    18. {
    19. tts.speak("Hallo!", TextToSpeech.QUEUE_FLUSH, null);
    20. }
    21. }
    Alles anzeigen
  • Ich gehe mal nur auf das 1. Bsp ein:

    ändere
    getApplicationContext();
    zu
    private Context _context = RunnerJNILib.GetApplicationContext();

    Hast du: Create Extension -> add plcaeholder --> add generic --> add function etc.?

    Brauchst du Berechtigungen, die du im Manifest eintragen solltest?
    Musst du das Manifest ändern oder etwas einfügen?

    Hast du die Java Dateien im richtigen Ordner und heißen sie so wie deine Klasse? (Bsp von mir:
    C:\Users\Lukas\Documents\GameMaker\Bluetooth\Bluetooth Shoot Duel.gmx\extensions\BluetoothGMS\AndroidSource\Java\BluetoothGMS.java




  • Hallo glim888,

    ​ändere getApplicationContext();
    zu
    private Context _context = RunnerJNILib.GetApplicationContext();


    ​Werde ich mal probieren.


    Hast du: Create Extension -> add plcaeholder --> add generic --> add function etc.?

    Brauchst du Berechtigungen, die du im Manifest eintragen solltest?
    Musst du das Manifest ändern oder etwas einfügen?

    Hast du die Java Dateien im richtigen Ordner und heißen sie so wie deine Klasse? (Bsp von mir: C:\Users\Lukas\Documents\GameMaker\Bluetooth\Bluetooth Shoot Duel.gmx\extensions\BluetoothGMS\AndroidSource\Java\BluetoothGMS.java



    ​Also die Funktionen sind korrekt (auch Groß-Kleinschreibung) eingetragen.
    ​Ob ich die Klassennamen groß oder klein schreibe ist egal.
    ​Im Manifest steht nur der Klassenname.
    Ein tts-Aufruf benötigt keine Berechtigungen.
    ​Der Ordner ist auch korrekt.
  • Ich glaube so etwas lässt sich auch nur über Intent's realisieren, oder ?

    Hoffe immer noch das sich da jemand auskennt.

    Ich bekomme es einfach nicht hin.
    Wie macht man es korrekt?

    So etwas geht auch nicht:

    Quellcode

    1. package ${YYAndroidPackageName};
    2. import ${YYAndroidPackageName}.R;
    3. import com.yoyogames.runner.RunnerJNILib;
    4. import android.os.Handler;
    5. import android.widget.Toast;
    6. import android.speech.tts.TextToSpeech;
    7. import android.speech.tts.TextToSpeech.OnInitListener;
    8. public class ATTS{
    9. private Handler handler;
    10. private String message;
    11. private TextToSpeech tts;
    12. public ATTS()
    13. {
    14. handler = new Handler();
    15. tts=new TextToSpeech(RunnerActivity.CurrentActivity, new TextToSpeech.OnInitListener() {
    16. @Override
    17. public void onInit(int status) {
    18. if(status != TextToSpeech.ERROR) {
    19. tts.setLanguage(Locale.GERMAN);
    20. }
    21. }
    22. });
    23. }
    24. public void ToastMessage_Short(String Message)
    25. {
    26. message=Message;
    27. handler.post(new Runnable() {
    28. @Override
    29. public void run() {
    30. Toast.makeText(RunnerActivity.CurrentActivity, message, Toast.LENGTH_SHORT).show();
    31. }
    32. });
    33. }
    34. public void ToastMessage_Long(String Message)
    35. {
    36. message=Message;
    37. handler.post(new Runnable() {
    38. @Override
    39. public void run() {
    40. Toast.makeText(RunnerActivity.CurrentActivity, message, Toast.LENGTH_LONG).show();
    41. }
    42. });
    43. }
    44. public void TtsSpeak(String Message)
    45. {
    46. message=Message;
    47. handler.post(new Runnable() {
    48. @Override
    49. public void run() {
    50. tts.speak(message, TextToSpeech.QUEUE_FLUSH, null);
    51. }
    52. });
    53. }
    54. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Weihnachtswichtel ()

  • Hallo Leute,

    ich hab's hinbekommen. :D Freue mich!

    ​So geht es:

    Java-Quellcode

    1. package ${YYAndroidPackageName};
    2. import ${YYAndroidPackageName}.R;
    3. import com.yoyogames.runner.RunnerJNILib;
    4. import android.os.Handler;
    5. import android.widget.Toast;
    6. import android.speech.tts.TextToSpeech;
    7. import android.speech.tts.TextToSpeech.OnInitListener;
    8. import android.media.AudioManager;
    9. import android.app.Activity;
    10. import android.os.Bundle;
    11. import android.content.Context;
    12. import java.util.Locale;
    13. public class ATTS{
    14. private Handler handler;
    15. private String message;
    16. private TextToSpeech mtts;
    17. private Context conti;
    18. public ATTS()
    19. {
    20. handler = new Handler();
    21. conti = RunnerJNILib.GetApplicationContext();
    22. mtts=new TextToSpeech(conti, new TextToSpeech.OnInitListener() {
    23. @Override
    24. public void onInit(int status) {
    25. if(status != TextToSpeech.ERROR) {
    26. mtts.setLanguage(Locale.GERMAN);
    27. }
    28. }
    29. });
    30. }
    31. public void ToastMessage_Short(String Message)
    32. {
    33. message=Message;
    34. handler.post(new Runnable() {
    35. @Override
    36. public void run() {
    37. Toast.makeText(RunnerActivity.CurrentActivity, message, Toast.LENGTH_SHORT).show();
    38. }
    39. });
    40. }
    41. public void ToastMessage_Long(String Message)
    42. {
    43. message=Message;
    44. handler.post(new Runnable() {
    45. @Override
    46. public void run() {
    47. Toast.makeText(RunnerActivity.CurrentActivity, message, Toast.LENGTH_LONG).show();
    48. }
    49. });
    50. }
    51. public void TtsSpeak(String Message)
    52. {
    53. message=Message;
    54. handler.post(new Runnable() {
    55. @Override
    56. public void run() {
    57. mtts.speak(message, TextToSpeech.QUEUE_FLUSH, null);
    58. }
    59. });
    60. }
    61. }
    Alles anzeigen


    Eine funktionierende gmz-Datei werde ich mal in einem anderen Beitrag posten.