Hello humanOS!!! Hoy les traigo un tuto que les ayudara a mostrar views por encima de cualquier aplicación en android.

Permisos

Para esto solo necesitamos un permiso en especifico (android.permission.SYSTEM_ALERT_WINDOW):

  • Para API < 23 o sea, hasta Android 5 agregaremos al AndroidManifest.xml lo siguiente:
  • Para API >= 23 o sea, a partir de Android 6 usaremos el siguiente método para que el usuario active el permiso necesario.
    /** code para identificar la respuesta del intent */
    public final static int REQUEST_CODE = 30101;
    
    public void checkDrawOverlayPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        /** chequeamos que no tengamos los permisos ya */
            if (!Settings.canDrawOverlays(MainActivity.this)) {
                /** lanzamos el intent para activar el permiso */
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                        Uri.parse("package:" + getPackageName()));
                /** startActivityForResult() para ver la respuesta del usuario */
                startActivityForResult(intent, REQUEST_CODE);
            }
        }
    }

Mostrando nuestra View

Para mostrar un layout pueden utilizar este método:

    private void mostrarDialog(Context context) {
        final WindowManager manager = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
        // posición en la pantalla 
        layoutParams.gravity = Gravity.CENTER;
        // tipo de view 
        layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
       // alto y ancho 
        layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
        layoutParams.height = 150;
        // animación 
        layoutParams.windowAnimations = android.R.style.Animation_Dialog;

        // el layout que vamos a utilizar 
        final View view = View.inflate(context.getApplicationContext(),R.layout.test_layout, null);
        Button yesButton = (Button) view.findViewById(R.id.yesButton);
        yesButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                manager.removeView(view);
            }
        });

        // la mostramos así         
        manager.addView(view, layoutParams);
    }

Y ya

Ahora solo les queda desarrollar su imaginación. Aquí les dejo el código ejemplo de una app que muestra una view cuando se modifica el estado del volumen.

Para la #UCI: https://codecomunidades.prod.uci.cu/aaherrera/HumanOS-System-Dialog.git

Para fuera de la #UCI: https://github.com/adrian011494/HumanOS-System-Dialog.git