2012-08-03 11 views
38

Es gibt viele Tutorials online für das Hinzufügen von Spracherkennung zu einer Android-App. Sie sind oft verwirrend und die Herausgeber der Codierung stehen nie für Fragen zur Verfügung. Ich brauche ein einfaches Tutorial mit vollständiger Codierung zum Hinzufügen von Spracherkennung zu meiner App.How To: Sprachbefehle in eine Android-Anwendung

Antwort

74

Wenn Sie der Android-App Ihrer Gruppe eine Spracherkennung hinzufügen möchten, ist dies sehr einfach.

In diesem Lernprogramm müssen Sie während des Einfügens im Code Importe hinzufügen.

  1. Erstellen Sie eine XML-Datei oder verwenden Sie eine vorhandene und stellen Sie sicher, dass Sie eine Schaltfläche und eine Listenansicht hinzufügen.
  2. In einer Java-Klasse müssen Sie die Aktivität erweitern und OnClickListener implementieren Sie erhalten einen Fehler, der besagt, dass Sie nicht implementierte Methoden haben. Bewegen Sie den Mauszeiger darüber und fügen Sie die nicht implementierten Methoden hinzu. Wir werden das später hinzufügen.
  3. Als nächstes richten Sie die Schaltfläche und Listenansicht in Ihrem Java.

    public ListView mList; 
    public Button speakButton; 
    

    auch hinzufügen:

    public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; 
    
  4. nächstes eine OnCreate Methode machen und auf die Schaltfläche und Hörer einzurichten.

    speakButton = (Button) findViewById(R.id.btn_speak); 
    speakButton.setOnClickListener(this); 
    

    auch diese Methode hinzufügen

    voiceinputbuttons(); 
    

    Denken Sie daran, setContentView für die xml Sie zeigen (wir werden es beim nächsten einrichten).

  5. Außerhalb Ihrer oncreate machen Sie eine neue Methode, die so aussieht.

    public void voiceinputbuttons() { 
        speakButton = (Button) findViewById(R.id.btn_speak); 
        mList = (ListView) findViewById(R.id.list); 
    } 
    
  6. Jetzt werden Sie Ihre Spracherkennung Tätigkeit einstellen müssen, indem Sie den folgenden Code verwenden.

    public void startVoiceRecognitionActivity() { 
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
         RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
         "Speech recognition demo"); 
        startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 
    } 
    
  7. nächstes 2 in Ihrem Onclick Verfahren von Schritt, um die Aktivität von Schritt hinzufügen 6.

    startVoiceRecognitionActivity(); 
    
  8. Als nächstes werden wir eine andere Methode zur Einrichtung haben. Kopieren Sie den folgenden Code und fügen Sie ihn ein.

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
         ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
         mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches)); 
    

    Übereinstimmungen sind das Ergebnis der Spracheingabe. Es ist eine Liste dessen, was der Benutzer möglicherweise gesagt hat. Wenn Sie eine if-Anweisung für das zu verwendende Schlüsselwort verwenden, können alle Aktivitäten verwendet werden, wenn Schlüsselwörter übereinstimmen. Es können mehrere Schlüsselwörter für die gleiche Aktivität eingerichtet werden, sodass mehr als ein Wort dem Benutzer die Verwendung der Aktivität ermöglicht der Benutzer muss sich keine Wörter aus einer Liste merken) Um eine Aktivität aus den Spracheingabeinformationen zu verwenden, verwenden Sie einfach das folgende Format;

    HINWEIS: Sie können den Code jederzeit durch Drücken von Strg + Shift + F in Eclipse formatieren.

  9. Jetzt werden wir unsere Methode einrichten, die von dem Code in Schritt 8 verwendet wird.Dieser Code erstellt eine Absicht, den Benutzer zu einem neuen Menü zu leiten. Sie benötigen dafür eine andere XML- und Java-Klasse. Denken Sie auch daran, Ihrem Manifest eine Aktivität hinzuzufügen.

    public void informationMenu() { 
        startActivity(new Intent("android.intent.action.INFOSCREEN")); 
    } 
    
  10. Schließlich benötigen Sie einen Code einrichten, die die Benutzer wissen lassen, wenn das Mikrofon in Betrieb ist. Fügen Sie diesen Code am Ende in die OnCreate-Methode ein.

    // Check to see if a recognition activity is present 
    // if running on AVD virtual device it will give this message. The mic 
    // required only works on an actual android device 
    PackageManager pm = getPackageManager(); 
    List activities = pm.queryIntentActivities(new Intent(
    RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
    if (activities.size() != 0) { 
        voiceButton.setOnClickListener(this); 
    } else { 
        voiceButton.setEnabled(false); 
        voiceButton.setText("Recognizer not present"); 
    } 
    

FINAL HINWEIS: Spracherkennung wird nicht auf einem virtuellen Emulator arbeiten, weil sie nicht das Mikrofon auf Ihrem Computer zugreifen können. Die Spracherkennung funktioniert nur mit einer Internetverbindung.

Dies ist ca. Wie sollte dein endgültiger Code in deinem Java aussehen?

package com.example.com.tutorialthread; 

import java.util.ArrayList; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.speech.RecognizerIntent; 
import android.support.v4.app.NavUtils; 

public class main extends Activity implements OnClickListener { 

public ListView mList; 
public Button speakButton; 

public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    speakButton = (Button) findViewById(R.id.btn_speak); 
    speakButton.setOnClickListener(this); 

    voiceinputbuttons(); 
} 

public void informationMenu() { 
    startActivity(new Intent("android.intent.action.INFOSCREEN")); 
} 

public void voiceinputbuttons() { 
    speakButton = (Button) findViewById(R.id.btn_speak); 
    mList = (ListView) findViewById(R.id.list); 
} 

public void startVoiceRecognitionActivity() { 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
     RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
     "Speech recognition demo"); 
    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    startVoiceRecognitionActivity(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
     // Fill the list view with the strings the recognizer thought it 
     // could have heard 
     ArrayList matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
     mList.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, matches)); 
     // matches is the result of voice input. It is a list of what the 
     // user possibly said. 
     // Using an if statement for the keyword you want to use allows the 
     // use of any activity if keywords match 
     // it is possible to set up multiple keywords to use the same 
     // activity so more than one word will allow the user 
     // to use the activity (makes it so the user doesn't have to 
     // memorize words from a list) 
     // to use an activity from the voice input information simply use 
     // the following format; 
     // if (matches.contains("keyword here") { startActivity(new 
     // Intent("name.of.manifest.ACTIVITY") 

     if (matches.contains("information")) { 
      informationMenu(); 
     } 
    } 
} 
+1

Sie sind genial .... nettes Tutorial – Pragnani

+5

@Sam Es ist gut für die Internetverbindung. aber, gibt es etwas wie seine ohne Internetverbindung? Ich möchte es für einfache Befehle wie, öffnen Sie die Nachricht Box '' Browser öffnen '' Open Dialpad 'usw. – stack

+0

@stack Verwenden Sie Google Now Integration? – milosmns

5

Wirklich gutes Tutorial. Gut gemacht.

Um ein bisschen mehr vervollständigen:

Sie benötigen die Erlaubnis, Ihr Manifest hinzufügen, wie

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

folgen auch Stimme nicht, wenn Sie

launchMode="singleInstance" oder launchMode="singleTask" es wie funktioniert haben aussieht Es sollte "Standard" sein