La nueva aplicación de teclado no aparece en la página de configuración de idioma y entrada

Descargué e importé el ejemplo de Softkeyboard de Android SDK (una aplicación) a Android Studio y lo instalé en mi Sony xPeria Z3 con Android 5.1.1. Dicho esto, no veo el nombre de la aplicación en la página de configuración de idioma y entrada .

Revisé la lista de aplicaciones instaladas en mi teléfono y veo que SoftKeyboard está instalado y en Android Studio, no hay ningún error.

¿Me puede mostrar una manera de solucionar este problema?

Eray, vea esto: developer.android.com/reference/android/provider/… Puedo llamar a ese método de entrada en particular que habilita la actividad usando adb shell am start -a android.settings.INPUT_METHOD_SETTINGSo adb shell "am start 'intent:#Intent;action=android.settings.INPUT_METHOD_SETTINGS;end'". Creo que esto puede no ser difícil, para que ese comando se convierta en un código.

Respuestas (1)

Nota : los comandos de esta solución requieren la configuración en la PC y la solución se prueba en Android 4.2.1, 5.0.2 y 5.1.1.


Cada vez que se instala en el sistema una aplicación equipada con un servicio IME, para conectar su IME al sistema , el propietario del dispositivo debe permitir explícitamente que la aplicación se convierta en parte de los métodos de entrada habilitados.

¿Entonces, Como sucede esto? Sabemos que podemos usar la línea de comandos, pero eso no es lo que hacen los usuarios comunes.

Sucede de esta manera. Cuando inicia esa aplicación, se le pedirá que habilite su teclado. A continuación, se le redirigirá a una subactividad de la aplicación Configuración. En las ROM cercanas al stock de Android, un usuario puede acceder a esa subactividad desde Configuración → Idioma y entrada → Teclado actual → Elegir teclados . Así es como se ve en algunos dispositivos:

(Haga clic en la imagen para ampliar; imagen cortesía de OP)

IMG:

Puede usar la línea de comandos como alternativa para mostrar esa subactividad

adb shell am start -a android.settings.INPUT_METHOD_SETTINGS
adb shell "am start 'intent:#Intent;action=android.settings.INPUT_METHOD_SETTINGS;end'"  # alternative to above command

Para una aplicación, en el momento en que gira el control deslizante hacia la derecha en esa subactividad, la identificación de su IME se agrega al valor de enable_input_methods , una configuración segura. Luego, la aplicación se incluye en Configuración → Idioma y entrada , entre los que ya están habilitados como métodos de entrada.

Dado que solo un IME puede permanecer como IME predeterminado en el sistema, la aplicación le muestra un cuadro de diálogo para seleccionar una aplicación de teclado como predeterminada. Se puede acceder a ese cuadro de diálogo desde Configuración → Idioma y entrada → Teclado actual . Cualquier entrada que elija allí se convierte en el teclado predeterminado en el dispositivo.

Ahora que conoce los detalles, puede agregar fácilmente un teclado a los métodos de entrada habilitados, incluida su aplicación de teclado de ejemplo.


Habilitación del teclado mediante la línea de comandos

También hay otra manera. Todos los métodos de entrada habilitados se pueden enumerar con este comando:

adb shell ime list -s

Salida de ejemplo

com.android.inputmethod.latin/.LatinIME
net.zhdev.ctrlvkeyboard/.CtrlVKeyboard

Todos los servicios IME disponibles (habilitados o no) se pueden enumerar a través de

adb shell ime list -a

Salida de ejemplo

com.android.inputmethod.latin/.LatinIME:
  mId= com.android.inputmethod.latin/.LatinIME mSettingsActivityName=com.android.inputmethod.latin.settings.SettingsActivity
  mIsDefaultResId=0x7f070000
  Servicio:
    prioridad = 0 orden preferido = 0 coincidencia = 0x108000 índice específico = -1 es predeterminado = falso
    Información de servicio:
      nombre=com.android.método de entrada.latin.LatinIME
      nombre del paquete = com.android.inputmethod.latin
      labelRes=0x7f08003a etiqueta no localizada=icono nulo=0x0 banner=0x0
      habilitado = verdadero exportado = verdadero nombre del proceso = com.android.inputmethod.latin
      permiso=android.permiso.BIND_INPUT_METHOD
      banderas=0x0
net.zhdev.ctrlvkeyboard/.CtrlVKeyboard:
  mId= net.zhdev.ctrlvkeyboard/.CtrlVKeyboard mSettingsActivityName=null
  mIsDefaultResId=0x0
  Servicio:
    prioridad = 0 orden preferido = 0 coincidencia = 0x108000 índice específico = -1 es predeterminado = falso
    Información de servicio:
      nombre=net.zhdev.ctrlvkeyboard.CtrlVKeyboard
      nombredelpaquete=net.zhdev.ctrlvteclado
      labelRes=0x7f0b0015 nonLocalizedLabel=icono nulo=0x0 banner=0x0
      habilitado = verdadero exportado = verdadero nombre del proceso = net.zhdev.ctrlvkeyboard
      permiso=android.permiso.BIND_INPUT_METHOD
      banderas=0x0
com.touchtype.swiftkey/com.touchtype.KeyboardService:
  mId= com.touchtype.swiftkey/com.touchtype.KeyboardService mSettingsActivityName=com.touchtype.settings.TouchTypeKeyboardSettings
  mIsDefaultResId=0x0
  Servicio:
    prioridad = 0 orden preferido = 0 coincidencia = 0x108000 índice específico = -1 es predeterminado = falso
    Información de servicio:
      nombre=com.touchtype.KeyboardService
      nombredelpaquete=com.touchtype.swiftkey
      habilitado = verdadero exportado = verdadero nombre del proceso = com.touchtype.swiftkey
      permiso=android.permiso.BIND_INPUT_METHOD
      banderas=0x0

Las cadenas resaltadas al lado mId=son los ID de las aplicaciones de teclado disponibles en mi sistema.

En cualquier ID, la cadena anterior /es el nombre del paquete de la aplicación de teclado. Ejemplo: para el teclado Swiftkey, el mId es:

com.touchtype.swiftkey/com.touchtype.KeyboardService

La cadena com.touchtype.swiftkeyes el nombre del paquete de la aplicación Swiftkey. El nombre del paquete es lo que lo ayudará a encontrar el mID apropiado que debe usar para habilitar una aplicación de teclado en particular.

Para conocer el nombre del paquete de una aplicación, siga Ver el nombre completo del paquete de la aplicación.

Para agregar o eliminar un IME en los métodos de entrada habilitados, haga

# replace ID with mId of the keyboard app which you want to add or remove

adb shell ime enable ID   
adb shell ime disable ID  

Para convertir un IME en el IME predeterminado del sistema, haga

# Note that it doesn't matter whether the IME is added into enabled input methods or not. Consider this a direct override.

adb shell settings put secure default_input_method "ID"
adb shell content update --uri content://settings/secure --bind value:s:"ID"  --where "name='default_input_method'"  # alternative to above command
Lo siento, no codifico, así que no puedo proporcionar un ejemplo (forma programática) para iniciar esa actividad. Esto es todo lo que puede ayudar a un usuario final.