12
votes

Détecter les langages installés pour la reconnaissance hors connexion

Il est possible de déterminer par le code qui packages langue sont actuellement installés sur un périphérique? J'ai essayé ceci:

    public class LanguageDetailsChecker extends BroadcastReceiver  {

    private List<String> supportedLanguages;

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle results = getResultExtras(true);
        if (results.containsKey(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES))
        {
            supportedLanguages =results.getStringArrayList(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
            Log.d("TAG","languages: " + supportedLanguages);
        }
    }
}


5 commentaires

Essayez ceci- http://sourceforge.net/p/dictionarymid/ Code / Tête / Tree / Trunk / Android / pourrait être utile pour vous, bonne chance


Quel service de reconnaissance vocale testez-vous?


La reconnaissance de la part de Google prend en charge des dizaines de langues. Que voulez-vous dire exactement que vous n'avez que l'anglais britannique / américain et espagnol installé?


Vous pouvez installer des packs de langue hors ligne, donc aucune connexion à Google n'est nécessaire. J'ai besoin de savoir quelles langues sont installées


Je vois. Je pense que vous ne pouvez pas savoir quels packs de langue sont disponibles pour une utilisation hors connexion, car c'est quelque chose de spécifique au moteur de reconnaissance de la part de Google.


3 Réponses :


2
votes

Si vous avez la racine (désolé), vous pouvez le faire de cette façon: xxx

ceci a été déchiré de l'Android 4.2.2 reconnaître.java source et modifié:

  • renvoie un simple booléen au lieu du répertoire du dictionnaire
  • prend une entrée de chaîne (ex. "EN_US") au lieu d'un local

    J'aurais la liste complète, tout comme vous l'êtes et la boucle à travers eux pour vérifier lesquelles sont disponibles hors ligne. J'ai vérifié le dossier / system / srec / user / srec / config / sur deux périphériques, et ils correspondent tous les deux aux dictionnaires que j'ai installés.

    bien sûr, le côté bas est que cela ne fonctionne que pour la racine, alors je ne suis pas sûr de la façon dont cela vous sera utile. Je ne sais vraiment pas quoi dire pour la non-racine, je ne trouve rien.


    EDIT: Sorti de curiosité, cependant, qu'est-ce que les extra_supported_languages ​​contiennent si vous sont < / em> hors ligne? Si cela revient correctement, vous devez simplement avoir à simuler le gestionnaire de réseau.


3 commentaires

Contient: Langues: [Af-ZA, ID-ID, MS-My, CA-ES, CS-CZ, DE-DE-DE, EN-AU-AUT, EN-CA, EN-001, EN-IN-IN-IN-IN-IN-IN-IN-in -Za, EN-GB, EN-US, ES-CL, ES-CO, ES-CR, ES-EC, ES-US, ES-SV, ES-ES, ES-GT , es-hn, es-mx, es-n, es-pa, es-py, es-PE, es-pr, es-do, es-uy, es-ve, eu-es, fil-ph, fr -Fr, GL-ES, HR-HR, Zu-ZA, IS-IS-IT-IT-IT, HU-HU, NL-NL, NB-NO, PL-PL, PT-BR, PT-PT, RO-RO , SK-SK, FI-FI, SV-SE, VI-VN, TR-TR, BG-BG, RU-RU, SR-RS, UK-UA, He-Il, Ar-il, Ar-Jo, AR -Ae, AR-BH, AR-SA, AR-KW, AR-OM, AR-PS, AR-QA, AR-LB, Ar-EG, KO-KR, CMN-HANS-CN, CMN-HANS-HANS , CMN-Hant-Tw, Yue-Hant-HK, JA-JP, LA]


Qui sont toutes les langues disponibles. Contient ES-ES, EN-US et EN-GB, qui sont les langues que j'ai actuellement installées


Je vois, alors faisant semblant une situation "sans réseau" ne fonctionnerait pas. Je ne sais pas quoi vous dire à part la solution racine, alors. Peut-être que quelqu'un d'autre trouvera quelque chose.



0
votes

Vérifiez cet exemple:

public class SpeakingAndroid extends Activity implements  OnInitListener {

        //TTS object
    private TextToSpeech myTTS;
        //status check code
    private int TS_CHECK_CODE = 0;

        //create the Activity
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

            //check for TTS data
            Intent checkTTSIntent = new Intent();
            checkTTSIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
            startActivityForResult(checkTTSIntent, TS_CHECK_CODE);
    }

        //act on result of TTS data check
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == MY_DATA_CHECK_CODE) {
            if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
                //the user has the necessary data - create the TTS
            myTTS = new TextToSpeech(this, this);
            }
            else {
                    //no data - install it now
                Intent installTTSIntent = new Intent();
                installTTSIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
                startActivity(installTTSIntent);
            }
        }
    }

        //setup TTS
    public void onInit(int initStatus) {

            //check for successful instantiation
        if (initStatus == TextToSpeech.SUCCESS) {
            if(myTTS.isLanguageAvailable(Locale.US)==TextToSpeech.LANG_AVAILABLE)
                myTTS.setLanguage(Locale.US);
        }
        else if (initStatus == TextToSpeech.ERROR) {
            Toast.makeText(this, "Sorry! Text To Speech failed...", Toast.LENGTH_LONG).show();
        }
    }
}


1 commentaires

Votre réponse concerne le texte de discours, non (hors ligne) à texte.



0
votes

Vous devez simplement essayer ceci:

 for (Locale locale : Locale.getAvailableLocales()) {
                try {
                    if (tts != null) {
                        if (locale != null && locale.getISO3Country() != null && locale.getISO3Language() != null && tts.isLanguageAvailable(locale) == 1) {
                            available_locs.add(locale);
                            tts.setLanguage((Locale) locale);

                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                if (tts.getVoice().getFeatures().contains(TextToSpeech.Engine.KEY_FEATURE_NOT_INSTALLED)) {
                                    Log.i(TAG, "[onInit]contains:IF " + locale.getDisplayName());
                                } else {
                                    Log.i(TAG, "***********[onInit]contains:ELSE " + locale.getDisplayName());
                                }

                            } else {
                                    /*not supported  21 below sdk so hide progressbar and hide spinner and only TTs in default
                                    language */
                                Log.i(TAG,"Not supported");
                            }

                        }
                    }
                } catch (Exception e) {
                    Log.i(TAG, "[onViewCreated] " + e.getLocalizedMessage());
                }
            }


0 commentaires