Wie erhalte ich einen Medienprojektionsmanager, ohne den aktuellen Vordergrundprozess zu stören, außer um Erlaubnis zu fragen?

Problem: Ich habe eine Screenshot-App, die einen Floating-Overlay-Dienst für Steuerelemente verwendet, und API Media Project Manager für die Bildschirmdarstellung, um Zugriff auf den Bildschirm zu erhalten. Manchmal, wenn ein Gerät wenig Speicher hat, startet Android den Dienst neu und ich verliere meine Medienprojektion.

Die einzige Möglichkeit, eine neue Medienprojektion erneut abzurufen, besteht darin, eine Aktivität erneut zu öffnen, bei der die Berechtigungen angefordert werden. Dies wäre das Ende der Aktivität, mit Ausnahme eines Problems. Bestimmte Apps, insbesondere Spiele, scheinen darauf zu warten, ob sie den Vordergrundprozess verlieren und angehalten oder auf andere Weise zurückgesetzt werden. Das ist nervig.

Hier ist mein ideales scenerio. Der Dienst wird geöffnet. Wenn der Benutzer im Berechtigungsanforderungsdialog die Option "Nicht mehr fragen" aktiviert hat, wird die Medienprojektion so abgerufen, dass die aktuelle Vordergrundaktivität nicht gestört wird.

Wie bekomme ich einen Medienprojektionsmanager, ohne den aktuellen Vordergrundprozess zu stören?

Gibt es eine Möglichkeit, die Medienprojektion von einem reinen Dienst abzurufen, oder eine Möglichkeit, Aktivitäten im Hintergrund von einem Dienst aus zu öffnen?

erzeit verwende ich diesen Code in "Aktivität", um den Medienprojektions-Manager zu erhalte

    @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();
        }
    }

}