¿Cómo obtengo un administrador de proyección de medios sin alterar el proceso actual en primer plano, excepto para pedir permiso?

Problema: Tengo una aplicación de captura de pantalla que utiliza un servicio de superposición flotante para los controles y el Administrador de proyectos de medios API de transmisión de pantalla para obtener acceso a la pantalla. A veces, cuando un dispositivo tiene poca memoria, Android reinicia el servicio y pierdo mi proyección multimedia.

La única manera que conozco para volver a adquirir una nueva proyección de medios es reabrir una Actividad que solicite los permisos, y eso sería el final, excepto por un problema. Ciertas aplicaciones, en particular los juegos, parecen escuchar cuando pierden el proceso de primer plano y hacen una pausa o se reinician. Esto es molesto.

Aquí está mi escenario ideal. El servicio se abre, si el usuario ha seleccionado "marcado, no volver a preguntarme" en el cuadro de diálogo de solicitud de permiso, obtiene la proyección de medios de manera que no perturbe la actividad actual en primer plano.

¿Cómo obtengo un administrador de proyección de medios sin alterar el proceso actual en primer plano?

¿Existe alguna forma de obtener la proyección de los medios de un servicio directo o una forma de abrir la actividad en segundo plano de un servicio?

Actualmente uso este código en Activity para obtener el administrador de proyección de medios

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
protected void getScreenShotPermission() {
    if(isLollipopOrNewer) {
        mediaProjectionManager = (MediaProjectionManager) getContext().getSystemService(MEDIA_PROJECTION_SERVICE);
        startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), 1);
    }
}




@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == Activity.RESULT_OK) {
            mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
            this.finish();
        }
    }

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta