Versuchen Sie FLAG_SECURE
:
public class FlagSecureTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.main);
}
}
Dies schützt definitiv vor manuellen Screenshots und automatischen Screenshots aus dem ICS-Verlauf der letzten Aufgaben. Es schützt auch vor Bildschirmaufzeichnungen (z. B. Apps, die die Medienprojektions-APIs verwenden).
UPDATE : Es schützt auch vor Now On Tap oder anderen Assistenten unter Android 6.0. Sie erhalten keinen Zugriff auf die Details von Widgets und Containern in Ihrer Benutzeroberfläche, wenn der Benutzer den Assistenten aufruft.
UPDATE 2 : Es wird jedoch nicht alles in der Aktivität geschützt. Jegliche Pop-up - Fenster - Dialog
, Spinner
, AutoCompleteTextView
, action bar Überlauf, usw. - wird unsicher sein. Sie können das Dialog
Problem beheben , indem Sie es aufrufen getWindow()
und einstellen FLAG_SECURE
. Der Rest ... wird schwierig. Weitere Informationen finden Sie in diesem Blogbeitrag .
FLAG_SECURE
existiert von Anfang an - es hatte bis vor kurzem nur eine begrenzte Bedeutung.FLAG_SECURE
wird er sich nicht dagegen wehren, da dies zu niedrig ist. Wenn Sie Ihre eigene Widget-Hierarchie genommen und auf einBitmap
-backed ziehen lassenCanvas
, wird diesFLAG_SECURE
wahrscheinlich nicht dagegen verteidigt, da Sie Ihre eigenen Screenshots Ihrer eigenen Widgets machen und daher vermutlich die "sicheren" dort haben wollten .FLAG_SECURE
ist für System- Screenshots gedacht, z. B. für die Miniaturansichten der letzten Aufgaben.Seien Sie vorsichtig bei der Verwendung von WindowManager.LayoutParams.FLAG_SECURE. Auf einigen Geräten (überprüft auf Samsung Galaxy ACE, z. B. GT-S5830) wird die Ansicht dadurch verschlüsselt. Sieht aus wie ein Samsung-spezifischer Fehler. Ich empfehle folgendes:
So sieht ein verschlüsselter Bildschirm aus:
Dies funktioniert jedoch auf ICS-Samsung-Handys ordnungsgemäß, sodass ich davon ausgehe, dass das Problem auf Gingerbread-Geräte (oder ältere Geräte) beschränkt ist.
quelle
Die von CommonsWare bereitgestellte Lösung ist auch in Lollipop weiterhin gültig.
Nur eine Anmerkung: Wenn Sie weiterhin keine Snapshots in der letzten Liste für die gesamte App sehen möchten , sollten ALLE implementierten Aktivitäten in der
onCreate()
Methode das FlaggetWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
vor angebensetContentView();
Andernfalls zeigt ein Schnappschuss in der letzten Liste die erste Aktivität ohne Flag an, wenn der Benutzer durch die Liste navigiert ist.
quelle
Hier ist eine Lösung zum Ausblenden von Inhalten einer App, indem Sie diese mit einem Begrüßungsbildschirm abdecken, wenn die App in den Hintergrund gestellt wird. Dies verwendet nicht die FLAG_SECURE-Technik. Ich überschreibe einfach die onPause- und onResume-Methoden der Bildschirme und ändere die Ansicht so, dass eine angezeigt wird, die alles im Hintergrund abdeckt.
https://stackoverflow.com/a/52976001/6686912
quelle
Dies hat bei mir funktioniert. Es verhindert, dass Screenshots und auch eingebaute oder Drittanbieter-Aufnahmeanwendungen vom Aufnahmebildschirm aufgenommen werden.
quelle
Dies ist Arbeit für mich, nachdem ich diese Zeile vor setContentView für jede Aktivität zu onCreate hinzugefügt habe.
quelle