2011-08-03 17 views
9

Pregunta breve: ¿Es posible (y cómo) mostrar el soft-keyboard desde un Servicio?¿Cómo se muestra el teclado virtual de un servicio?

Pregunta larga: Escribí un servicio que crea una "barra superior", que se muestra en la parte superior de todas las actividades, que contiene un EditText. Quiero mostrar el teclado virtual cuando se hace clic en EditText, pero esto no está sucediendo.

Por supuesto que he probado esto desde onFocusChange del servicio() y onClick():

InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE); 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

La solución que se me ocurrió es solicitar la actividad actual para mostrar el teclado, mediante la ampliación de la actividad clase y agregando una interfaz AIDL. El inconveniente es que cada evento clave debe enviarse nuevamente al Servicio (a través de otra interfaz AIDL) y convertirse manualmente en Unicode.

Además, si la actividad actual contiene un EditText, el teclado virtual solo funciona para la actividad y no aparece más cuando se selecciona EditText del servicio.

¿Qué impide que se muestre el teclado virtual del servicio si la actividad actual tiene un EditText? ¿Podría ser una limitación de Android?

+0

hizo a resolver esto? estoy enfrentando el mismo problema –

Respuesta

0

Si desea mostrar Soft Keyboard en el toque de edittext, ¿por qué no considera utilizar onTouchListener con ese texto de edición? Creo que edittext.requestfocus() también hará esto. Si no, el oyente definitivamente trabajaría.

Además, por el tipo de vista que menciona, hubiera sido mejor usar fragmentos en lugar de servicio para crear una vista.

1

Me enfrenta un problema similar. Pero en mi caso, el problema se debe al uso de WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE al crear WindowManager.LayoutParams para ver.

Y para la visibilidad del teclado

InputMethodManager inputManager = (InputMethodManager) context. 
       getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (inputManager != null) { 
      inputManager.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); 
     } 
Cuestiones relacionadas