Essayez 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);
}
}
Cela protège définitivement contre les captures d'écran manuelles et les captures d'écran automatiques de l'historique des tâches récentes d'ICS. Il protège également contre l'enregistrement d'écran (par exemple, les applications utilisant les API de projection multimédia).
MISE À JOUR : il protège également contre Now On Tap ou d'autres assistants sur Android 6.0; ils n'auront pas accès aux détails des widgets et des conteneurs dans votre interface utilisateur si l'utilisateur ouvre l'assistant.
MISE À JOUR # 2 : cependant, tout dans l'activité ne sera pas protégé. Toutes les fenêtres pop-up - Dialog
, Spinner
, AutoCompleteTextView
, débordement de la barre d'action, etc. - seront en situation d' insécurité. Vous pouvez résoudre le Dialog
problème en l'appelant getWindow()
et en définissant FLAG_SECURE
. Le reste ... devient délicat. Consultez cet article de blog pour en savoir plus.
FLAG_SECURE
existe depuis le début - il avait juste une signification limitée jusqu'à récemment.FLAG_SECURE
ne vous défendrez pas contre cela, car c'est trop bas. De même, si vous avez pris votre propre hiérarchie de widgets et l'avez fait dessiner sur unBitmap
-backedCanvas
, vousFLAG_SECURE
ne vous défendrez probablement pas contre cela, car vous prenez vos propres captures d'écran de vos propres widgets et que vous vouliez donc probablement les "sécurisés".FLAG_SECURE
est pour les captures d'écran système , telles que les vignettes des tâches récentes.Soyez prudent lorsque vous utilisez WindowManager.LayoutParams.FLAG_SECURE, sur certains appareils (vérifié sur Samsung Galaxy ACE, par exemple GT-S5830) cela rendra la vue brouillée. On dirait un bogue spécifique à Samsung. Je recommande ce qui suit:
Voici à quoi ressemble un écran brouillé:
Cela fonctionne correctement sur les téléphones ICS Samsung, donc je suppose que le problème est isolé sur les appareils Gingerbread (ou plus anciens).
la source
La solution fournie par CommonsWare continue d'être valable également dans Lollipop.
Juste une note, si vous souhaitez continuer à ne pas voir les instantanés dans la liste récente pour l' ensemble de l' application, TOUTES les activités implémentées doivent spécifier dans la
onCreate()
méthode l'indicateurgetWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
avantsetContentView();
Sinon, un instantané de la liste récente affichera la première activité sans l'indicateur si l'utilisateur l'a parcourue.
la source
Voici une solution pour masquer le contenu d'une application en la recouvrant d'un écran de démarrage lorsque l'application est mise en arrière-plan. Cela n'utilise pas la technique FLAG_SECURE, je remplace simplement les méthodes onPause et onResume des écrans et je modifie la vue pour en afficher une qui couvre tout ce qui se trouve à l'arrière.
https://stackoverflow.com/a/52976001/6686912
la source
cela a fonctionné pour moi, cela empêche de prendre une capture d'écran et également toute application d'enregistrement intégrée ou tierce de l'écran d'enregistrement.
la source
C'est un travail pour moi après avoir ajouté ces lignes dans onCreate avant setContentView de chaque activité.
la source