73 votes

Android: Personnalisation de la miniature d'applications récentes (capture d'écran par défaut)

L'application que je suis en train de travailler sur montre certaines informations sensibles qui ne doivent pas figurer sur les "Tâches Récentes" de l'écran lors de l'arrêt de l'application en appuyant sur le bouton d'accueil.

Je tiens à brouiller les données sensibles dans la capture d'écran ou d' afficher le logo de l'application de la place.

Je suis au courant de la suite des approches, mais ils ne correspondent pas à mes besoins:

Et puis il y a quelques solutions de contournement que j'ai essayé mais cela ne fonctionne pas comme on l'espérait:

  • Démarrer une nouvelle activité qui affiche le logo de l'application en onPause , de sorte que c'est la capture d'écran est affiché à la place de l'activité. Mais la nouvelle activité prend trop de temps à s'ouvrir et il perturbe l'expérience de l'utilisateur.
  • Définir les activités de l'affichage du contenu d'une image du logo de l'application en onPause. Cela semblait être une excellente solution pour moi. Malheureusement, la capture d'écran pour les tâches récentes de l'écran est pris à un temps indéterminé. Pendant les tests, le logo de l'application de rapidement s'affiche avant que l'application est fermée en appuyant sur 'la Maison', mais la capture d'écran montre l'activité d'un court laps de temps avant que.
  • En supprimant les données sensibles des widgets (par exemple, textView.setText("")) a le même problème de capture d'écran calendrier vient d'être mentionné.

Toutes les idées alternatives ou des solutions à la liste des solutions de contournement?

54voto

Dellkan Points 583

J'ai regardé dans cette une couple de mois pour le même but que vous.

Malheureusement, j'ai dû conclure qu'il n'est tout simplement pas possible. J'ai fouillé dans le code source android et confirmé.

  • Il n'y a pas de rappels ou des méthodes à partir de android qui vous permet de le personnaliser (qui fonctionne de toute façon). En plus d' FLAG_SECURE, cette partie du code n'accepte aucune entrée ou de changement.
  • OnPause et similaires du cycle de vie des méthodes sont appelées trop tard (la capture d'écran est déjà pris). Tout le cycle de vie des méthodes indication que vous êtes sur le point d'aller dans l'arrière-plan s'exécute trop tard.
  • L'image que vous voyez dans les tâches récentes est en réalité une capture d'écran - et donc n'est pas affectée par les changements que vous faites (trop tard) de votre point de vue. Cela signifie que vous ne pouvez pas modifier votre point de vue juste-à-temps (comme ce qui la rend invisible, de la remplacer par quelque chose d'autre, l'ajout d' SECURE_FLAG, ou de toute autre obstruction de la vue). En aparté, ces images peuvent être trouvés sur un émulateur en /data/system_ce/0/recent_images.
  • La seule exception est l'utilisation de FLAG_SECURE, ce qui permettra d'éviter la capture d'écran de la prise de votre application. J'ai expérimenté avec la définition de ce DRAPEAU en onPause et le retirer en onResume, cependant, comme déjà mentionné cycle de vie de ces méthodes s'exécute après la capture d'écran est déjà pris, et donc n'ont absolument aucun effet.

Comme discuté dans la Façon de changer l'instantané illustré par les récentes applications de la liste? il sert à être un rappel que vous pouvez utiliser pour personnaliser la miniature: onCreateThumbnail. Toutefois, cela ne fonctionne pas et il n'est jamais appelé. Pour être clair, le rappel est toujours là, il est tout simplement jamais appelée par le système d'exploitation. Le fait qu'il a cessé de travailler est mal documentée, mais apparemment a été silencieusement obsolète/supprimé dans la version 4.0.3

Comme pour la vignette elle-même, c'est une capture d'écran prise serverside. Il est pris avant onPause est appelé (ou, en fait, avant tout rappel indiquant que votre activité est sur le point d'aller dans l'arrière-plan est appelé).

Lorsque votre application est en arrière-plan, de votre point de vue est animé (pour obtenir que zoom-out de transition). Cette animation peut être affecté par des changements que vous faites dans onPause (si vous êtes assez rapide) (j'ai expérimenté avec réglage de l'opacité à 0 sur la fenêtre entre autres choses). Ce ne sera cependant qu'affecter l'animation. Lorsque l'animation est terminée, l'affichage est remplacé par la capture d'écran prise plus tôt.

Voir aussi ces questions qui traitent de ce:

0voto

Chapz Points 354

Comment mettre en place une mise en page de superposition sur le dessus de l'ensemble de votre activité?

Qu'il soit transparent, c'est par clic par défaut, donc pas d'impact négatif sur l'expérience utilisateur lors de l'utilisation.

En onPause() ensemble une demi-transparent, l'image floue que le fond de cette disposition, les données seront brouillés derrière elle. En onResume() changer l'arrière-plan à une totale transparence de nouveau. Le tour est joué.

Il pourrait être plus rapide que les autres types de superpositions. L'effet secondaire positif est, si vous ne le unblurring comme un court métrage d'animation de l'effet lorsque l'utilisateur passe à l'arrière (avec une bonne bibliothèque qui utilise C++ au lieu de Java), il pourrait même l'air cool et les utilisateurs ne reviendrai pas même à l'esprit en voyant ça.

Je n'ai pas essayé moi-même, mais c'est quelque chose que vous n'avez pas encore essayé.

-2voto

Arsalan Khan Points 155

Je pense que cela ne peut être réalisé que via BroadCastReceiver mais aucun récepteur n'est présent. Par conséquent, vous devez d'abord désactiver la fonctionnalité de capture d'écran par défaut dans Android, puis implémenter votre propre fonctionnalité pour prendre une capture d'écran et, avant de prendre une capture d'écran, vous devez brouiller vos informations sécurisées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X