unit PMA.ScreenGuard; { FLAG_SECURE : interdit la capture d'ecran et l'apparition du contenu dans l'apercu des applications recentes. COMPLEMENTAIRE, pas redondant, avec le masquage sur WillBecomeInactive : celui-ci traite l'apercu des recentes, celui-la traite en plus les captures manuelles, l'enregistrement d'ecran et la duplication vers un ecran externe - qu'aucun code applicatif ne peut intercepter. ACTIF EN RELEASE SEULEMENT. En debug le drapeau empeche aussi les captures d'ecran de developpement, ce qui rend le diagnostic penible pour un gain nul sur un appareil de test. Le verifier demande donc une compilation Release. } interface /// A appeler une fois, au demarrage, depuis le thread principal. procedure SecureScreen; implementation {$IF DEFINED(ANDROID) AND NOT DEFINED(DEBUG)} uses // System.SysUtils : sans elle, TAndroidHelper.GetJActivity reste un appel // non expanse et le compilateur le signale a chaque usage. System.SysUtils, Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android; procedure SecureScreen; begin // setFlags touche la fenetre : thread d'interface obligatoire. CallInUIThread( procedure begin TAndroidHelper.Activity.getWindow.setFlags( TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE, TJWindowManager_LayoutParams.JavaClass.FLAG_SECURE); end); end; {$ELSE} procedure SecureScreen; begin // Rien a faire : ni Windows ni une compilation de debogage. end; {$ENDIF} end.