2015-06-07 5 views
17

C'è un modo per emettere un comando vocale qualcosa come:Android App integrato con OK Google

Ok Google ASK XXX Alcuni domanda specifica App o Comando

e farlo lanciare "APP" con il testo riconosciuto : "Qualche domanda specifica App o comando"

la mia applicazione ha il riconoscimento vocale come servizio ... ma quando si utilizza il mio APP non riesco a fare domande che OK Google in grado di gestire ...

+0

è il riconoscimento vocale come servizio che riduce la durata della batteria? puoi spiegare quello scenario? –

risposta

14

Attraverso la Voice Actions API , la tua app può registrarsi per system actions, uno dei quali è 'ricerca' (quindi è possibile eseguire la ricerca di alcune domande o comandi su APP).

In passato, alcuni sviluppatori erano in grado di submit a custom voice action request. Dopo l'approvazione, gli utenti possono eseguire un'azione specifica con la tua app tramite voce. Questa non è più un'opzione.

+0

Eccellente ... Non ho visto questa API prima ... sembra essere quello di cui ho bisogno. –

+0

@ r.t.s.- se funziona, si prega di accettare la risposta – ianhanniballake

+0

Avrei dovuto commentare qualche tempo fa ... Ho inviato una richiesta vocale personalizzata ... mai ricevuto alcun feedback. –

8

Questo è in realtà piuttosto semplice, con l'API di azioni vocale integrata è possibile farlo sia in modalità online che offline. Ecco una breve demo per voi,

prima richiesta all'utente di inserire qualche voce,

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(); 
     } 
    } 

Si aprirà la schermata di costruito in input vocale di Google e adotterà le input vocali. Ora, dopo un input vocale controllare il risultato e ottenere la voce in una stringa convertita,

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

     } 
    } 

Ora è possibile manipolare la stringa in qualsiasi modo si desidera o confrontarli con le stringhe di azione predefiniti per eseguire un'azione specifica e molti altri ....

UPDATE:

Per rendere l'applicazione funziona su dopo aver detto un comando specifico per esempio "OK Google", Basta definire una stringa statica denominata "OK Google" e confrontare ciascun input vocale con questa stringa predefinita. Se questo corrisponde alla stringa "OK Google", passa ai mondi successivi ed esegui le istruzioni. Ad esempio,

"OK Google parlano la l'ora attuale"

Qui è possibile confrontare le prime due parole "OK Google" se che soddisfa le vostre String mossa pre-definito per i prossimi parole che è "parla l'ora corrente". Per questo è possibile salvare un set di array contenenti i comandi come "parla l'ora corrente" pronuncerà l'ora.

Per renderlo più intelligente è possibile implementare un servizio in background e continuare ad ascoltare l'input vocale dell'utente.

PS: Non sono sicuro che sarebbe un modo efficiente ma è solo un altro approccio per farlo.

+5

Mentre questo è appropriato per ricevere input vocale su richiesta dalla tua app, la domanda iniziale era di fare in modo che "OK Google" attivasse l'apertura dell'app, cosa che non va a – ianhanniballake

+0

Se non sbaglio "OK Google" è solo un pre -Testo definito che Google utilizza per riconoscere il comando. Questo può essere fatto facilmente definendo una stringa statica chiamata "OK Google" e confrontandola con l'input vocale dell'utente. Quello che corrisponde alla stringa possiamo confrontare le prossime istruzioni. Per renderlo più divertente possiamo implementarlo nel servizio in background in modo che continui ad ascoltare l'utente in background. Per favore correggimi se qualcosa non va nella mia idea. @ianhanniballake –

+1

La tua risposta, ovviamente, si basa su un'attività presente e non esegue alcuna elaborazione in tempo reale, quindi utilizzandola per attivare un rilevamento di stile "ok google" a livello di sistema che passi attraverso [l'API delle azioni vocali di Google] (https://developers.google.com/voice-actions/) non è del tutto appropriato né il tuo codice funzionerà come un servizio in background. Ancora una volta, non una cattiva risposta - solo non una risposta alla domanda posta. – ianhanniballake

2

Per integrare "OK Google" nella tua app è facile con i seguenti due passaggi.

In primo luogo abbiamo bisogno di dichiarare nel file manifesto

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

Ora abbiamo bisogno di dichiarare in attività 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    
     } 

utente deve seguire la sintassi da individuare con "Ok Google", quando un utente dice "OK Google, cerca la frase su nome app", Google controlla prima se c'è un'app chiamata nome app installata che si è dichiarata in grado di gestire g tali domande.

+2

hai anche bisogno che la tua app sia pubblicata sul Play Store di Google, altrimenti Google Now non riconoscerà "nome app", vedi questa esperienza ragazzo, sotto "a cosa devo fare attenzione?" http://blog.prolificinteractive.com/2015/11/06/implementing-google-voice-actions-into-your-android-app/ –