Announcement

Collapse
No announcement yet.

Google Spracheingabe in einer App nutzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Google Spracheingabe in einer App nutzen

    Hallo,

    ich versuche momentan eine Spracheingabe über die Google Spracherkennung einer App beizufügen. Als Vorlage habe ich dieses Youtube Tutorial der Galileo Press genutzt: https://www.youtube.com/watch?v=EsvWVSMnzHA
    Zunächst möchte ich nur die Spracheingabe aufrufen, doch da tritt schon ein Problem auf. Durch den Klick auf einen Button der mit der Funktion "onClick" verknüpft ist, soll die Spracheingabe aufgerufen werden:
    Code:
    package com.androidProject2.fragOle;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    
    import com.androidProject.fragOle.Speech.Dictate;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
    
    	
    	public void onClick(View view){
    		Dictate.recognize(this);
    	}
    
    	@Override
    	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
    		super.onActivityResult(requestCode, resultCode, data);
    		
    		if (requestCode == Dictate.SPEECH_RECOGNIZED){
    			if (data != null) {
    				System.out.println("...");
    			}
    		}
    	}
    
    }
    Die Klasse Dictate in der selbst erstellten Bibliothek "fragOleLibrary" stellt die Methode recognize() zur Verfügung. Die Bibliothek wird auch von dem Projekt FragOle benutzt und da die App recognize und Dictate nicht erkennen wollte, habe ich über Build path den Zugang gewährleistet:

    Code:
    package com.androidProject.fragOle.Speech;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.speech.RecognizerIntent;
    
    public class Dictate {
    	static public final int SPEECH_RECOGNIZED = 1;
    	static public void recognize(Activity activity){
    		Intent intent = new Intent();
    		intent.setAction(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    		intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    		activity.startActivityForResult(intent, SPEECH_RECOGNIZED);
    	}
    }
    Nun habe ich unter anderem folgende Probleme: die Console sagt Could not find FragOleLibrary.apk. Das Log Cat teilt mir außerdem mit, dass es eine IllegalStateException gibt: Could not execute method of the activity, sowie eine ActivityNotFoundException: No activity found to handle intent {act=android.speech.action.RECOGNIZE_SPEECH (has extras) }
    Ich benutze fürs Debugging ein Samsung Galaxy Note Tablet, falls das von Interesse sein sollte, dass mit dem Internet verbunden ist, um die Kommunikation mit den Google Servern zu ermöglichen. Aber ich stehe gerade ein Bisschen auf dem Schlauch, weiß jemand Rat?

  • #2
    Sofer die in der Klasse Dictate genutzte Activity die ist, die du oben abgebildet hast, so hat diese keine Methode

    startActivityForResult
    Christian

    Comment


    • #3
      Okay, wie genau ist das gemeint? Also dass sie Activity die Methode nicht besitzt?

      Comment


      • #4
        Die Klasse hat die Methode nicht
        Im Log oder der Konsole müsste die Zeilenummer der Exception stehen
        Christian

        Comment


        • #5
          Ja im Log steht Zeile 13,14, also scheinbar bei onClick

          Comment


          • #6
            Dann ist wohl scheinbar die Methode nicht vorhanden, jedenfalls nicht hier. Ggf. poste das Log hier
            Zuletzt editiert von Christian Marquardt; 09.09.2014, 17:58.
            Christian

            Comment


            • #7
              Im Video hat der Autor seine Methode durch einen Klick auf ein Menu Item aufgerufen. Doch bei mir funktioniert das nicht, ganz abgesehen davon, dass ich das so nicht möchte:

              Code:
              @Override
              	public boolean onOptionsItemSelected(MenuItem item) {
              
              		if (item.getItemId()==R.id.actionSpeek){
              			Dictate.recognize(this);
              		}
              		return super.onOptionsItemSelected(item);
              	}
              Bei mir unterstreicht er actionSpeek und sagt can not be resolved or is not a field. Aber darum solls auch nicht gehen. Könntest du mir einen Hinweis geben wie ich das Problem mit meiner eigenen onClick Methode in den Griff bekomme?

              Comment


              • #8
                Was in dem Video gemacht wird weiss ich nicht - wer schaut sich ein Video zum programmieren an?
                Wenn schon wäre es ja zielführend das erstmal so wie es im Video gemacht wird zu laufen zu bringen und danach eigene Änderungen einzuführen
                Die R.java wird automatisch erstellt. Sie enthält die Konstanten. An dieser sollte nichts geändert werden

                Würde vermuten es fehlt die ID vom Button
                Bsp.

                <Button android:id="@+id/hi_button"


                http://www.androidpit.de/de/android/...orkshop#toc181
                Christian

                Comment


                • #9
                  Das war das am besten erklärende das ich gefunden habe, zumal es von der Galileo Press ist die auch Java ist auch eine Insel herausgibt, welches ich zum lernen nutze. Mit .xml Datein habe ich mich schon beschäftigt und die Button ID ist korrekt. Ja könnte ich tun, nur müsste ich dann am besten die ganzen Videos zuvor anschauen, da er scheinbar ein komplexeres Programm entwickelt - wie gesagt ich könnte, aber ich habe gedacht das sprengt den Rahmen. Ich möchte ja zunächst nicht mehr als die Spracheingabe implementieren.

                  Comment


                  • #10
                    R.id.actionSpeek

                    Dann gibt es
                    actionSpeek

                    nicht
                    Christian

                    Comment


                    • #11
                      Ja scheinbar schon. Aber diesen Teil möchte ich für mein Vorhaben ja auch nicht verwenden. Ich habe den Fehler jetzt gefunden. Die Permission die ich benutzt habe war falsch. Scheinbar hatte ich damit einfach keinen Zugriff auf das Micro. Also so wie der Code da steht den ich gepostet habe läuft das Programm.
                      Aber danke für deine Hilfe!

                      Comment

                      Working...
                      X