2012-08-03 12 views
38

Esistono molti tutorial online per l'aggiunta del riconoscimento vocale a un'app Android. Spesso confondono e gli editori della codifica non sono mai disponibili per le domande. Ho bisogno di un semplice tutorial con codifica completa per aggiungere il riconoscimento vocale alla mia app.Istruzioni: comandi vocali in un'applicazione Android

risposta

74

Se si desidera aggiungere il riconoscimento vocale all'app Android del proprio gruppo, è molto semplice.

In questo tutorial sarà necessario aggiungere le importazioni mentre si incolla il codice.

  1. creare un file xml o utilizzare uno esistente e assicurarsi di aggiungere un pulsante e un listview.
  2. in una classe java è necessario estendere l'attività e implementare OnClickListener Si otterrà un errore che indica che si dispone di metodi non implementati. Passa il mouse su di esso e aggiungi i metodi non implementati. Aggiungeremo a questo più tardi.
  3. Quindi impostare il pulsante e listview in java.

    public ListView mList; 
    public Button speakButton; 
    

    aggiungere anche:

    public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; 
    
  4. Avanti, fare un metodo OnCreate e impostare il pulsante e ascoltatore.

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

    aggiungere anche questo metodo (ci sarà configurarlo successivo)

    voiceinputbuttons(); 
    

    Ricordati di setContentView per l'XML si sta mostrando.

  5. Al di fuori del tuo oncreate, crea un nuovo metodo simile a questo.

    public void voiceinputbuttons() { 
        speakButton = (Button) findViewById(R.id.btn_speak); 
        mList = (ListView) findViewById(R.id.list); 
    } 
    
  6. Ora dovrete impostare la vostra attività di riconoscimento vocale utilizzando il seguente codice.

    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. successivo, all'interno del vostro metodo onclick dal punto 2 aggiungere l'attività dal punto 6.

    startVoiceRecognitionActivity(); 
    
  8. prossimo avremo per impostare un altro metodo. Copia e incolla il seguente codice.

    @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)); 
    

    corrispondenze è il risultato di input vocale. È una lista di ciò che l'utente ha probabilmente detto. L'utilizzo di un'istruzione if per la parola chiave che si desidera utilizzare consente l'utilizzo di qualsiasi attività se le parole chiave corrispondono è possibile impostare più parole chiave per utilizzare la stessa attività in modo che più di una parola consenta all'utente Utilizzare l'attività (lo rende così l'utente non deve memorizzare le parole da un elenco) Per utilizzare un'attività dalle informazioni di input vocale, utilizzare semplicemente il seguente formato;

    if (matches.contains("information")) { 
        informationmenu(); 
    } 
    

    NOTA: è possibile formattare il codice in qualsiasi momento premendo ctrl + maiusc + F in eclissi.

  9. Ora imposteremo il metodo utilizzato dal codice nel passaggio 8.Questo codice crea l'intento di indirizzare l'utente a un nuovo menu. Avrai bisogno di un'altra classe xml e java per questo. Inoltre, ricorda di aggiungere un'attività al tuo manifest.

    public void informationMenu() { 
        startActivity(new Intent("android.intent.action.INFOSCREEN")); 
    } 
    
  10. Infine, è necessario impostare un codice che vi permetterà all'utente di sapere se il microfono è operativo. Incolla questo codice all'interno del metodo OnCreate alla fine.

    // 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"); 
    } 
    

FINALE NOTA: Il riconoscimento vocale non funziona su un emulatore virtuale, perché non possono accedere al microfono del computer. Il riconoscimento vocale funzionerà solo con una connessione Internet.

Questo è di ca. quale dovrebbe essere il tuo codice finale nel tuo java.

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

Sei fantastico .... bel tutorial – Pragnani

+5

@ Sam È buono per la connessione internet. ma, c'è qualcosa come il suo senza connessione a Internet? Lo voglio per semplici comandi come: finestra di messaggio aperto '' apri browser '', quadrante aperto 'ecc. – stack

+0

@stack Usa l'integrazione di Google Now? – milosmns

5

Davvero un buon tutorial. Molto bene.

Per completare un po 'di più:

è necessario aggiungere il permesso al vostro manifestarsi come seguire

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

Anche voce non funziona se si dispone di

launchMode="singleInstance" o launchMode="singleTask" sembra dovrebbe essere "standard"

Problemi correlati