¿Cómo se pueden detectar gestos de pantalla fuera de la propia aplicación?

Sé que SO frunce el ceño pesadamente en "cómo hago esto" preguntas, pero no ve una manera alrededor de él esta vez.

Soy un experimentado y experto desarrollador de Android, así que me siento muy torpe al hacer esta pregunta, pero acabo de instalar esta aplicación y hace algo que pensé que era imposible.

Es decir, escucha los gestos de pantalla (en este caso, desliza desde los bordes de la pantalla hacia el interior), INDEPENDIENTEMENTE de dónde se encuentre en su dispositivo … lo que significa que escucha cuando está en las pantallas de inicio del Lanzador y cuando está en OTRAS aplicaciones … no importa lo que estás haciendo, está escuchando y cuando detecta el golpe desde el borde de la pantalla que te permite sacar un cajón de ajustes ocultos que luego vive como un transparente (fragmento? la parte superior de cualquier otra aplicación en la que estás y cuando te despidan (al pulsar BACK) te deja dondequiera que estuvieras en tu experiencia anterior.

Sinceramente no tengo ni idea de cómo esto es posible y realmente me encantaría un empujón en la dirección correcta. [EDITAR] introduzca la descripción de la imagen aquí

hay dos cosas que tienes que manejar:

  1. mostrando una vista en la parte superior. para ello, debe utilizar un permiso especial TYPE_SYSTEM_ALERT . aquí hay un código para mostrar una vista en la parte superior:

     final WindowManager.LayoutParams param=new WindowManager.LayoutParams(); param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; final View view=findViewById(R.id.view1); final ViewGroup parent=(ViewGroup)view.getParent(); if(parent!=null) parent.removeView(view); param.format=PixelFormat.RGBA_8888; param.type=WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; param.gravity=Gravity.TOP|Gravity.LEFT; param.width=view.getLayoutParams().width; param.height=view.getLayoutParams().height; final WindowManager wmgr=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE); wmgr.addView(view,param); // TODO handle overlapping title bar and/or action bar // TODO you must add logic to remove the view // TODO you must use a special permission to use this method :android.permission.SYSTEM_ALERT_WINDOW 
  2. manteniendo viva la aplicación. para ello, debe crear un servicio que se ejecute en primer plano, lo que significa que utiliza una notificación. aquí hay un enlace .

hay un montón de aplicaciones que tienen esta capacidad. el primero que he visto fue AirCalc .

Esto ahora se considera una vulnerabilidad de seguridad que se ha conectado en Android 4.0.3+: Pregunta: TYPE_SYSTEM_OVERLAY en ICS Esto es / fue llamado tapjacking. IMHO, la creación de algo que depende de esta funcionalidad ahora debe ser evitado ya que ahora es algo que oficialmente será parcheado si otros métodos se encuentran en versiones futuras. Sin embargo, esa pregunta tiene una respuesta que le muestra cómo hacerlo en 4.0.3 + Si decide ir por esa ruta, entonces tenga en cuenta que su capacidad para hacerlo podría desaparecer con las versiones más recientes de Android.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.