web-dev-qa-db-fra.com

Comment: commandes vocales dans une application Android

Il existe de nombreux didacticiels en ligne pour ajouter la reconnaissance vocale à une Android. Ils sont souvent déroutants et les éditeurs du codage ne sont jamais disponibles pour des questions. J'ai besoin d'un didacticiel simple avec un codage complet pour ajouter de la voix reconnaissance à mon application.

50
Sam Bevins

Si vous souhaitez ajouter la reconnaissance vocale à l'application Android Android de votre groupe, c'est très simple.

Tout au long de ce didacticiel, vous devrez ajouter des importations lors du collage du code.

  1. créer un fichier xml ou utiliser un fichier existant et assurez-vous d'ajouter un bouton et une liste.
  2. dans une classe Java, vous devez étendre l'activité et implémenter OnClickListener. Vous obtiendrez une erreur indiquant que vous disposez de méthodes non implémentées. Passez la souris dessus et ajoutez les méthodes non implémentées. Nous y ajouterons plus tard.
  3. Ensuite, configurez le bouton et la liste dans votre Java.

    public ListView mList;
    public Button speakButton;
    

    ajouter également:

    public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
    
  4. Ensuite, créez une méthode OnCreate et configurez le bouton et l'écouteur.

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

    ajoutez également cette méthode (nous la configurerons ensuite)

    voiceinputbuttons();
    

    N'oubliez pas de définirContentView pour le xml que vous affichez.

  5. En dehors de votre création, créez une nouvelle méthode qui ressemble à ceci.

    public void voiceinputbuttons() {
        speakButton = (Button) findViewById(R.id.btn_speak);
        mList = (ListView) findViewById(R.id.list);
    }
    
  6. Vous devez maintenant configurer votre activité de reconnaissance vocale en utilisant le code suivant.

    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. Ensuite, dans votre méthode onclick de l'étape 2, ajoutez l'activité de l'étape 6.

    startVoiceRecognitionActivity();
    
  8. Ensuite, nous devrons mettre en place une autre méthode. Copiez et collez le code suivant.

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

    correspond au résultat de la saisie vocale. Il s'agit d'une liste de ce que l'utilisateur a peut-être dit. L'utilisation d'une instruction if pour le mot-clé que vous souhaitez utiliser permet d'utiliser n'importe quelle activité si les mots-clés correspondent, il est possible de configurer plusieurs mots-clés pour utiliser la même activité, donc plus d'un mot permettra à l'utilisateur d'utiliser l'activité (le rend ainsi l'utilisateur n'a pas à mémoriser les mots d'une liste) Pour utiliser une activité à partir des informations d'entrée vocale, utilisez simplement le format suivant;

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

    REMARQUE: vous pouvez formater le code à tout moment en appuyant sur ctrl + shift + F dans Eclipse.

  9. Nous allons maintenant configurer notre méthode utilisée par le code à l'étape 8. Ce code crée une intention de diriger l'utilisateur vers un nouveau menu. Vous aurez besoin d'un autre xml et d'une classe Java pour cela. Aussi, n'oubliez pas d'ajouter une activité à votre manifeste.

    public void informationMenu() {
        startActivity(new Intent("Android.intent.action.INFOSCREEN"));
    }
    
  10. Enfin, vous devez configurer un code qui permettra à l'utilisateur de savoir si le micro est opérationnel. Collez ce code à l'intérieur de la méthode OnCreate à la fin.

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

NOTE FINALE: La reconnaissance vocale ne fonctionnera pas sur un émulateur virtuel car ils ne peuvent pas accéder au micro de votre ordinateur. La reconnaissance vocale ne fonctionnera qu'avec une connexion Internet.

C'est env. à quoi devrait ressembler votre code final dans votre 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();
        }
    }
}
90
Sam Bevins

Très bon tutoriel. Bien joué.

Pour compléter un peu plus:

Vous devez ajouter l'autorisation à votre manifeste comme suit

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

De plus, la voix ne fonctionne pas si vous avez

launchMode="singleInstance" ou launchMode="singleTask" il semble que ce devrait être "standard"

7
Nikita Yo LAHOLA