Tener la aplicación ejecutándose sobre otra aplicación
Quiero hacer una actividad que se puede abrir por encima de CUALQUIER aplicación.
Normalmente, incluso cuando la actividad se establece como diálogo, al cambiar a mi aplicación, ves mi aplicación y, en segundo plano, ves el lanzador:
- Pasar de una actividad a otra
- Firebase getDownloadURL
- Descubrimiento del servicio UPnP nativo de Android
- ¿Debo confiar en Android para descartar los sorteos fuera de pantalla?
- ¿Cómo puedo hacer que mi ArrayAdapter siga el patrón ViewHolder?
PERO, quiero que la aplicación vaya por encima de cualquier aplicación como esta: (hecho en photoshop):
Vi esta pregunta Crear una ventana de superposición del sistema (siempre en la parte superior) , pero en ICS no hay funcionalidad al diseño. Además, quiero dar un cuadro de diálogo de mi aplicación sin minimizar la otra aplicación …
- Cómo mostrar en TimePickerDialog extra 1 Horas
- ¿Por qué no puedes lanzar directamente el tipo en java?
- ¿Por qué se utiliza FrameLayout para fragmentos?
- Crash Una aplicación que utiliza excepción en Android
- Android Geocoder getFromLocationName devuelve siempre null
- CoordinatorLayout con RecyclerView & CollapsingToolbarLayout
- Diferencia entre Kivy y Java para aplicaciones Android
- Error de conexión de anuncios: EOF (nuevo en android)
Hay un montón de aplicaciones que muestran una vista flotante encima de todo como: airbrowser, LilyPad, Stick, AirTerm, Smart Taskbar, aircalc …
De todos modos, para lograr esta característica, debe tener un permiso especial llamado "android.permission.SYSTEM_ALERT_WINDOW", y usar algo como eso:
final WindowManager.LayoutParams param=new WindowManager.LayoutParams(); param.flags=WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; final View view=findViewById(R.id.my_floating_view); 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=parent!=null?LayoutParams.WRAP_CONTENT:view.getLayoutParams().width; param.height=parent!=null?LayoutParams.WRAP_CONTENT: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 // TODO if you wish to let the view stay when leaving the app, make sure you have a foreground service running.
Soy uno de los desarrolladores del SDK de Tooleap, y también nos ocupamos de este problema. Básicamente, no es necesario utilizar SYSTEM_ALERT_WINDOW
para mostrar una actividad encima de otra. Usted puede apenas exhibir una actividad "encogida" regular con un fondo transparente.
Para realizar una "actividad reducida, cambie los parámetros de la ventana de actividad de altura y ancho:
WindowManager.LayoutParams params = getWindow().getAttributes(); params.x = ...; params.y = ...; params.width = ...; params.height = ...; this.getWindow().setAttributes(params);
Para crear un fondo transparente añada a la definición de actividad en el archivo de manifiesto:
android:theme="@android:style/Theme.Translucent"
De esta manera, puede crear la ilusión de una actividad flotante:
Tenga en cuenta que sólo se reanudará la actividad de primer plano, mientras que la de fondo se interrumpe. Pero para la mayoría de las aplicaciones esto no debería ser un problema.
Ahora todo lo que queda es cuándo lanzar la actividad flotante.
Aquí hay un ejemplo de una aplicación de calculadora "flotante" que usa una actividad regular. Tenga en cuenta que la actividad debajo de la calculadora pertenece a otra aplicación.
- OnListItemClick no funciona para listview?
- El botón de retroceso de Android no vuelve a la actividad anterior