Pregunta

Estoy trabajando en una aplicación de Android en la que he implementado el reconocimiento de voz y TTS. Así que estaba pensando en iniciar la pantalla de configuración tanto para el reconocimiento de voz de Google como para el TTS para permitir que el usuario cambie la configuración desde la aplicación. He implementado la configuración de TTS con éxito utilizando el siguiente código:

intent = new Intent();
intent.setAction("com.android.settings.TTS_SETTINGS");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

Ahora quiero mostrar la "Configuración de reconocimiento de voz de Google de Google" en mi aplicación para permitir que el usuario cambie las opciones de idioma, etc. He buscado mucho ... Hice muchos golpes y intentos, pero no pudo cargar la pantalla de configuración de reconocimiento de voz. Por favor, dígame cómo puedo implementar eso. Gracias por adelantado...

¿Fue útil?

Solución

Estuve atrapado en esto durante años también ...

    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setComponent(newComponentName("com.google.android.voicesearch","com.google.android.voicesearch.VoiceSearchPreferences"));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    this.startActivity(intent);
    }

Espero que también lo haga por ti ...

EDITAR: Como se señaló en los comentarios, esto cambió en la versión Jelly Bean de la aplicación de búsqueda de Google. Para detectar cualquier problema de actualización potencial en los que no pueda usar Build.Version, puede usar algo en este sentido:

try {
final Intent vsInt = new Intent(Intent.ACTION_MAIN);
vsInt.setComponent(new ComponentName("com.google.android.voicesearch",
                            "com.google.android.voicesearch.VoiceSearchPreferences"));
vsInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(vsInt);

} catch (final Exception e) {

try {
final Intent vsjInt = new Intent(Intent.ACTION_MAIN);
vsjInt.setComponent(new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.voicesearch.VoiceSearchPreferences"));
vsjInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(vsjInt);

} catch (final Exception e1) {
e1.printStackTrace();
}
}

Otros consejos

La respuesta @Brandall no funciona en Android 5.1 para mí, como otro nombre de componente se usa para la configuración de reconocimiento de voz allí.

/**
 * Open speech recognition settings activity
 *
 * @return true in case activity was launched, false otherwise
 **/
public boolean openSpeechRecognitionSettings() {
    Intent intent = new Intent(Intent.ACTION_MAIN);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    boolean started = false;
    ComponentName[] components = new ComponentName[]{
            new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.apps.gsa.settingsui.VoiceSearchPreferences"),
            new ComponentName("com.google.android.voicesearch", "com.google.android.voicesearch.VoiceSearchPreferences"),
            new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.voicesearch.VoiceSearchPreferences"),
            new ComponentName("com.google.android.googlequicksearchbox", "com.google.android.apps.gsa.velvet.ui.settings.VoiceSearchPreferences")
    };
    for (ComponentName componentName : components) {
        try {
            intent.setComponent(componentName);
            startActivity(intent);
            started = true;
            break;
        } catch (final Exception e) {
            Timber.e(e, null);
        }
    }
    return started;
}

Editar: actualizado con el último nombre del componente

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top