Cambiar el perfil del teclado mediante progtwigción

¿Hay alguna forma de que podamos cambiar los teclados instalados programáticamente (sin ir a la sección de configuración de forma manual)?

Mi requisito es que al usuario se le presenten todos los teclados que están instalados en el teléfono y se obtiene un cuadro de diálogo para elegir el que desee.

(Básicamente, queremos reducir el paso para transferirlo a la página de configuración)

Esta pieza de código cumplirá con sus requisitos:

InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); imeManager.showInputMethodPicker(); 

Como señala Commonsware en su respuesta, no hay forma de hacer esto detrás de la espalda del usuario.

Si su aplicación tiene privilegios del sistema, y ​​tiene el permiso

  

puede habilitar el teclado de forma programática y configurarlo como el teclado actual, convirtiéndolo en el teclado predeterminado SIN CONOCIMIENTO DE USUARIO O INTERVENCIÓN.

 //get the old default keyboard in case you want to use it later, or keep it enabled String oldDefaultKeyboard = Settings.Secure.getString(resolver, Setting.Secure.DEFAULT_INPUT_METHOD); //enable your keyboard Settings.Secure.putString(resolver, Settings.Secure.ENABLED_INPUT_METHODS, "com.my.keyboard/.full.path"); //set your keyboard as the new default keyboard Settings.Secure.putString(resolver, Settings.Secure.DEFAULT_INPUT_METHOD, "com.my.keyboard/.full.path"); 

Puede habilitar varios teclados (como el teclado predeterminado y el suyo propio) proporcionando una lista de teclados a ENABLED_INPUT_METHODS , separados por ‘:’. Ver documentos

Puede verificar el paquete completo y el ID de ruta de su teclado invocando la ime list -a través del adb shell

Si tiene un dispositivo rooteado, puede usar la utilidad /system/bin/ime .

Enumere todos los métodos de entrada instalados: # ime list -a

Establecer el teclado de Google como predeterminado:
# ime set com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME

En el lado de Java use Runtime.getRuntime (). Exec (…) .

¿Hay alguna forma de que podamos cambiar los teclados instalados programáticamente (sin ir a la sección de configuración)?

Afortunadamente, no, por razones de seguridad. Si una aplicación puede dictar qué editor de métodos de entrada se utiliza, el malware podría cambiar el editor de métodos de entrada a su registrador de pulsaciones.

  InputMethodManager imeManager = (InputMethodManager) getApplicationContext().getSystemService(INPUT_METHOD_SERVICE); imeManager.showInputMethodPicker(); 

Este código pedirá al usuario que cambie el teclado predeterminado