2012-05-10 16 views
14

Ho lavorato sul riconoscimento vocale API in Android e ha scoperto che i risultati variano discorso assegnare quando le impostazioni della lingua vengono modificate, c'è un modo per impostare a livello di codice? o c'è un intento di pranzare la schermata delle impostazioni della lingua parlata? o cos'altro? nota: Ho cercato di usare questo intento in più:Come impostare la lingua nel riconoscimento vocale su Android?

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US"); 

ma era inefficace

+0

intent.putExtra (RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, Locale.getDefault()); ... funzionerà se gooogle supporta quella lingua .. – Nepster

+0

L'extra che dovrebbe servire a questo scopo è EXTRA_LANGUAGE, non EXTRA_LANGUAGE_PREFERENCE. Tuttavia, LANGUAGE_EXTRA funziona solo fino al 4.3. A partire da 4.4, Android consente di selezionare più lingue in Impostazioni e cercherà sempre di "indovinare" la lingua in base alle impostazioni di sistema e ignora completamente EXTRA_LANGUAGE. Quindi, qualcuno? – matteo

risposta

39

Come dice pargat, questo lo farà:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); 

Inoltre, la vostra applicazione può interrogare per la lista degli langu supportati età inviando un RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS ordinati in onda in questo modo:

Intent detailsIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS); 
    sendOrderedBroadcast(
      detailsIntent, null, new LanguageDetailsChecker(), null, Activity.RESULT_OK, null, null); 

dove LanguageDetailsChecker è qualcosa di simile:

public class LanguageDetailsChecker extends BroadcastReceiver 
{ 
    private List<String> supportedLanguages; 

    private String languagePreference; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Bundle results = getResultExtras(true); 
     if (results.containsKey(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE)) 
     { 
      languagePreference = 
        results.getString(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE); 
     } 
     if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)) 
     { 
      supportedLanguages = 
        results.getStringArrayList(
          RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES); 
     } 
    } 
} 

Per il controllo codice completo di questo progetto github: https://github.com/gast-lib

+0

Grazie per il pacchetto completo –

+0

penso che sia più facile da usare metodo RecognizerIntent per creare l'intento: 'val detailsIntent = RecognizerIntent.getVoiceDetailsIntent (contesto) activity.sendOrderedBroadcast (detailsIntent, null, LanguageDetailsChecker ({languages.accept (si)}), null, Activity.RESULT_OK, null, null) ' L'intento dell'esempio di cui sopra non ha funzionato per me :( getVoiceDetailsIntent() ha fatto :) – Aetherna

8

Hai provato questo:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); 
6

Questo funziona :

Devi usare "en_US" invece di "en-US". Il primo è il formato corretto del tag locale Java.

Si suggerisce di utilizzare

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.US.toString()); 

per evitare di ricordare tale dettaglio.

5

ho finalmente avuto la mia app per limitare i risultati di riconoscimento vocale per un ingresso di lingua specificata (consegnarlo, ad esempio, "ja" per "fr" giapponese o per il francese) con l'aggiunta di tutti e 3 i seguenti extra:

String languagePref = "de";//or, whatever iso code... 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, languagePref); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, languagePref); 
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, languagePref); 

Spero che questo aiuta qualcuno.

+2

Hai davvero messo tutti quelli nell'intento che passi avviare Lasciando ?? Funzionava davvero? E non solo con EXTRA_LANGUAGE? Quali versioni di Android hai testato? EXTRA_LANGUAGE è l'unico che dovrebbe essere rilevante qui. Gli altri due, secondo la documentazione, sono pensati per interrogare il sistema per il linguaggio supportato, NON per il riconoscimento. Quindi dovrebbero essere totalmente privi di significato qui. Per me, funziona solo con EXTRA_LANGUAGE fino a 4.3, quindi l'extra viene completamente ignorato a partire da 4.4. – matteo

+1

@matteo giusto ... non funziona su 4.4 ... –

11

non esiste una soluzione, ma un hackaround ...

intent.putExtra("android.speech.extra.EXTRA_ADDITIONAL_LANGUAGES", new String[]{"en"}); 

check here la storia completa.

+2

Amico Non so perché avevi solo 1 punto ma questa è sicuramente una risposta corretta. Molte grazie. – TacB0sS

+1

@ Le persone di TacB0sS amano le risposte lunghe ... beh, sono contento che ti abbia aiutato. –

+1

risposta più utile che abbia mai avuto! veramente. –

-1

Ho usato questo codice:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); 

Speranza è possibile eseguire la vostra applicazione ora.

0

Ho cercato di usare

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 

ma non ha funzionato per me (non ho preso la lingua di sistema). Ha aiutato qui in questo modo:

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault().toString()); 
Problemi correlati