it-swarm.com.de

So verhindern Sie die Bildschirmaufnahme in Android

Ist es möglich, die Bildschirmaufnahme in der Android-Anwendung zu verhindern?

Ich möchte eine sichere Android-Anwendung entwickeln. In diesem Fall muss ich Bildschirmaufzeichnungssoftware erkennen, die im Hintergrund ausgeführt wird, und sie beenden. Ich habe SECURE FLAG verwendet, um Screenshots zu verhindern. Aber ich weiß nicht, ob es möglich ist, die Videoaufnahme des Android-Bildschirms zu verhindern. Lassen Sie mich wissen, wie Sie Bildschirmaufnahmen (Video/Screenshots) verhindern können.

58
Anand

Ich werde sagen, dass es nicht möglich ist, die Bildschirm-/Videoaufnahme einer Android-App durch unterstützte Mittel vollständig zu verhindern. Wenn Sie es jedoch nur für normale Android-Geräte blockieren möchten, ist die SICHERE FLAGGE wesentlich.

1) Das Secure-Flag blockiert sowohl normale Screenshots als auch Videoaufnahmen.

Auch Dokumentation unter diesem Link sagt das

Fensterflagge: Behandeln Sie den Inhalt des Fensters als sicher, verhindert, dass es in Screenshots erscheint oder auf nicht sicheren Displays angezeigt wird.

Die oben genannte Lösung wird sicherlich verhindern, dass Anwendungen das Video Ihrer App aufnehmen

Siehe die Antwort hier .

2) Es gibt alternative Möglichkeiten, Bildschirminhalte zu erfassen.

Es kann möglich sein, den Bildschirm einer anderen App auf einem gerooteten Gerät oder mithilfe des SDK zu erfassen.

beide bieten wenig bis keine Chance, dass Sie es entweder blockieren oder eine Benachrichtigung erhalten.

Zum Beispiel: Es gibt Software, um den Bildschirm Ihres Telefons über das SDK auf Ihren Computer zu spiegeln, und Bildschirmsoftware könnte dort verwendet werden, was von Ihrer App nicht erkannt werden kann.

Siehe die Antwort hier .

73
RobCob

Fügen Sie einfach diese Zeile hinzu:

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Vor Ihrer setContentView()-Methode.

39
Ido Naveh

So deaktivieren Sie die Bildschirmaufnahme:

Fügen Sie in der onCreate()-Methode folgende Codezeile hinzu:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                           WindowManager.LayoutParams.FLAG_SECURE);

So aktivieren Sie die Bildschirmaufnahme:

Suchen Sie nach LayoutParams.FLAG_SECURE und entfernen Sie die Codezeile.

11
Rajesh Shetty

Versuche dies:

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
8
Jithu P.S

Sie können Ihre App als Geräte-/Profilbesitzer erstellen und setScreenCaptureDisabled() aufrufen. Aus den docs führt diese API folgende Aktionen aus:

public void setScreenCaptureDisabled (Komponentenname admin, boolean deaktiviert) Hinzugefügt in API Level 21

Wird von einem Geräte-/Profilbesitzer aufgerufen, um festzulegen, ob die Bildschirmaufnahme .__ ist. deaktiviert. Durch das Deaktivieren der Bildschirmaufnahme wird auch verhindert, dass der Inhalt von Wird auf Anzeigegeräten angezeigt, die keinen sicheren Videoausgang haben . Unter FLAG_SECURE finden Sie weitere Informationen zu sicheren Oberflächen und zum Sichern zeigt an.

Der aufrufende Geräteadministrator muss ein Geräte- oder Profilbesitzer sein. Wenn es ist Eine Sicherheitsausnahme wird nicht ausgelöst. Parameter admin Welche DeviceAdminReceiver, dem diese Anforderung zugeordnet ist. deaktiviert Ob Die Bildschirmaufnahme ist deaktiviert oder nicht.

Alternativ können Sie auch eine MDM (Mobile Device Management) Partner-App werden. OEMs stellt ihren MDM-Partner-Apps zusätzliche APIs zur Steuerung des Geräts zur Verfügung. Samsung bietet beispielsweise eine API zur Steuerung der Bildschirmaufzeichnung auf dem Gerät an ihre MDM-Partner.

Derzeit ist dies die einzige Möglichkeit, Bildschirmeinschränkungen durchzusetzen.

7
rupesh jain

Es scheint, dass Sie wissen, wie Sie Screenshots in Ihrer App deaktivieren, und es gibt andere Antworten, die Ihnen dabei helfen. Aber ich werde versuchen, Ihnen einige wichtige Informationen zu geben, die Ihnen niemand gibt.

1) Sie kann keine App haben, die zu 100% sicher ist, wenn Sie Screenshots erstellen (Foto/Video). Es gibt keine offizielle Möglichkeit , Screenshots in Android aufzunehmen. Wenn eine App Bildschirme aufzeichnet, muss sie nicht unterstützte Methoden verwenden (entweder rooten oder SDK verwenden). 

Es gibt nur sehr wenig Möglichkeiten, eine App zu blockieren, wenn sie den Root-Zugriff auf Aufzeichnungsbildschirme verwendet.

2) Niemand hat dieses Problem hier erwähnt, aber seien Sie vorsichtig, wenn Sie WindowManager.LayoutParams.FLAG_SECURE verwenden. In vielen Geräten (wie beim Samsung Galaxy ACE, z. B. GT-S5830) wurde nachgewiesen, dass dadurch die gesamte Ansicht durcheinander geraten kann. So was,

enter image description here

Bitte setzen Sie einen Scheck so

if(Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.HONEYCOMB) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}

Es funktioniert perfekt auf ICS Geräten, also kein Problem.

3) Ich habe auch herausgefunden, dass selbst auf neueren Geräten wie Android 4.3 Animationsprobleme auftreten, wenn der Bildschirm gedreht wird. Bitte check diesen Fehlerbericht.

7
Aritra Roy

Für Java-Benutzer

getWindow (). setFlags (WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

Für Kotlin-Benutzer

window.setFlags (WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)

1
user9778021

Ich habe alle Antworten gesehen, die nur für eine Aktivität geeignet sind, aber es gibt eine Lösung, die Screenshots für alle Aktivitäten blockiert, ohne der Aktivität Code hinzuzufügen. Erstellen Sie zunächst eine benutzerdefinierte Anwendungsklasse und fügen Sie eine registerActivityLifecycleCallbacks hinzu. Registrieren Sie sie dann in Ihrem Manifest.

MyApplicationContext.class

public class MyApplicationContext extends Application {
    private  Context context;
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        setupActivityListener();
    }

    private void setupActivityListener() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);            }
            @Override
            public void onActivityStarted(Activity activity) {
            }
            @Override
            public void onActivityResumed(Activity activity) {

            }
            @Override
            public void onActivityPaused(Activity activity) {

            }
            @Override
            public void onActivityStopped(Activity activity) {
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }



}

Manifest

 <application
        Android:name=".MyApplicationContext"
        Android:allowBackup="true"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:roundIcon="@mipmap/ic_launcher_round"
        Android:supportsRtl="true"
        Android:theme="@style/AppTheme">
1

Gemäß diesem offiziellen Leitfaden können Sie Ihrem Fensterlayout WindowManager.LayoutParams.FLAG_SECURE hinzufügen. Screenshots werden dadurch nicht zugelassen.

1
r5d

Ich habe diese Lösung verwendet, um einen manuellen Schnappschuss in der App zuzulassen, während die Screenshots nicht zugelassen werden, wenn die App im Hintergrund läuft. Ich hoffe, es hilft.

@Override
protected void onResume() {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
    super.onResume();
}

@Override
protected void onPause() {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
    super.onPause();
}
0
S.Bozzoni

über Foto-Screenshot, FLAG_SECURE funktioniert nicht als gerootetes Gerät.

Wenn Sie jedoch die Screenshot-Datei überwachen, können Sie das Abrufen der Originaldatei verhindern.

versuche dies one

1. Überwachungs-Screenshot (Dateiüberwachung) mit Android-Remote-Service
2. Originalbild löschen .
3. Stellen Sie die Bitmap-Instanz bereit, damit Sie sie ändern können. 

0
Soo Chun Jung