web-dev-qa-db-fra.com

Android App intégrée avec OK Google

Existe-t-il un moyen d'émettre une commande vocale comme:

OK GOOGLE ASK XXX Une question ou une commande spécifique à une application

Et faites-le lancer "APP" avec le texte reconnu: "Une question ou une commande spécifique à l'application"

Mon application a la reconnaissance vocale en tant que service ... mais lorsque j'utilise mon application, je ne peux pas poser de questions que OK Google peut gérer ...

22
r.t.s.

Grâce à API d'actions vocales , votre application peut s'inscrire pour actions système , dont l'une est "rechercher" (vous pouvez donc faire "rechercher une question ou une commande sur l'APP") ).

Dans le passé, certains développeurs pouvaient soumettre une demande d'action vocale personnalisée . Après approbation, les utilisateurs peuvent effectuer une action spécifique avec votre application via la voix. Ce n'est plus une option.

18
ianhanniballake

C'est en fait assez simple, avec le intégré API Actions vocales vous pouvez le faire en mode en ligne et hors ligne. Voici une courte démo pour vous,

D'abord, invitez l'utilisateur à saisir de la voix,

    private void promptSpeechInput() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
        intent.putExtra(RecognizerIntent.EXTRA_Prompt,
                getString(R.string.speech_Prompt));
        try {
            startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
        } catch (ActivityNotFoundException a) {
            Toast.makeText(getApplicationContext(),
                    getString(R.string.speech_not_supported),
                    Toast.LENGTH_SHORT).show();
        }
    }

Cela fera apparaître l'écran de saisie vocale Google intégré et prendra les entrées vocales. Maintenant, après une entrée vocale, vérifiez le résultat et obtenez la voix dans une chaîne convertie,

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

        switch (requestCode) {
        case REQ_CODE_SPEECH_INPUT: {
            if (resultCode == RESULT_OK && null != data) {

                ArrayList<String> result = data
                        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                // here the string converted from your voice
            String converted_text = (result.get(0);
            }
            break;
        }

        }
    }

Maintenant, vous pouvez manipuler la chaîne comme vous le souhaitez ou les comparer avec des chaînes d'action prédéfinies pour exécuter une action spécifique et bien d'autres ....

MISE À JOUR:

Pour faire fonctionner l'application après avoir dit une commande spécifique, par exemple "OK Google", Il suffit de définir une chaîne statique appelée "OK Google" et de comparer chaque entrée vocale avec cette chaîne prédéfinie. Si cela correspond à la chaîne "" OK Google ", passez aux mondes suivants et exécutez les instructions. Par exemple,

"OK Google parle de l'heure actuelle"

Ici, vous pouvez comparer les deux premiers mots "OK Google" si cela correspond à votre chaîne prédéfinie passer aux mots suivants qui sont "parler l'heure actuelle". Pour cela, vous pouvez enregistrer un ensemble de tableaux contenant vos commandes comme "parler l'heure actuelle" parlera l'heure.

Pour le rendre plus intelligent, vous pouvez implémenter un service d'arrière-plan et continuer d'écouter la voix de l'utilisateur.

PS: Je ne sais pas si ce serait un moyen efficace mais c'est juste une autre approche pour le faire.

10
Prokash Sarkar

Pour intégrer "OK ​​Google" dans votre application, il vous suffit de suivre les deux étapes suivantes.

Nous devons d'abord déclarer dans le fichier manifeste

<activity..
 <intent-filter>
                <action Android:name="com.google.Android.gms.actions.SEARCH_ACTION" />
                <category Android:name="Android.intent.category.DEFAULT" />
            </intent-filter>
/>

Maintenant, nous devons déclarer dans l'activité onCreate

 if (getIntent().getAction() != null && getIntent().getAction().equals("com.google.Android.gms.actions.SEARCH_ACTION")) {
            query = getIntent().getStringExtra(SearchManager.QUERY);
            Log.e("Query:",query);   //query is the search Word              
        }

L'utilisateur doit suivre la syntaxe pour détecter par "Ok google", Lorsqu'un utilisateur dit "OK Google, recherchez phrase le nom de l'application", Google vérifie d'abord s'il y a une application appelée nom d'application installée qui s'est déclarée capable de gérer de telles requêtes.

5
Phani varma