2010-09-21 6 views
5

Quiero escribir una aplicación de Android que sería un servicio en segundo plano que escucharía un gesto específico o presionar una tecla en el y luego desencadenar una acción. ¿Es posible hacer tal cosa con un servicio? Si es así, ¿podría alguien guiarme en la dirección correcta? Tengo búsqueda alta y baja puede parecer encontrar una respuesta.lectura de Android entrada de usuario en un servicio

+0

En general no debería ser capaz de capturar gestos o pulsaciones de teclas de un servicio. Echa un vistazo a la barra de búsqueda de Google Gesture. Utilizan una pulsación larga en el botón de búsqueda para abrir una actividad que luego captura el gesto. Pero no sé qué intento o señal utilizan para que se les notifique la larga búsqueda en la prensa. – Janusz

Respuesta

0

Hacer esto (excepto en la parte superior de las aplicaciones que cooperan enviándoles su información) sería un gran agujero de seguridad del tipo que la arquitectura de Android está diseñada para prohibir. Para hacerlo, necesitaría modificar la plataforma y hacer que la observación se realice mediante algo que se ejecute con acceso a la entrada sin procesar del botón y el botón, posiblemente como parte del controlador para eso.

En otras palabras, puede hacerlo con dificultad en su propio teléfono rooteado o en los dispositivos que fabrica, pero no es utilizable para la mayoría de las personas.

1

no es difícil de leer en el lugar donde se tocan, pero los toques de esta manera proporcionan solo la ubicación, no el tiempo, ni en altibajos.

en su servicio

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (layout != null) { 
     ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(layout); 
     layout = null; 
    } 
} 
@Override 
public void onCreate() { 
    super.onCreate(); 
    layout = new RelativeLayout(this); 
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
         WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT); 
    params.setTitle("test"); 
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
    wm.addView(layout, params); 
} 

y su carretilla para el tacto, tendrá que ser tan

public boolean gestureHandler(MotionEvent event, boolean eat) { 
     if(event.getAction() == MotionEvent.ACTION_OUTSIDE) 
+0

El administrador de ventanas no le permitirá agregar vistas desde un servicio ... Este código genera una excepción. – FoamyGuy

+1

una actualización puede haber roto esto. –

Cuestiones relacionadas