Le contrôle de la capture d'écran sous iOS 7 multitâche switcher
J'ai essayé de trouver quelques informations concernant le nouveau multitâche switcher dans iOS 7 et en particulier la capture d'écran que l'OS prend lorsque l'application est en période d'hibernation.
Est-il possible de désactiver complètement la fonction de capture d'écran? Ou puis-je masquer l'application tout à fait de la switcher? L'application doit s'exécuter en arrière-plan, mais nous ne voulons pas montrer toute la capture d'écran de l'application.
La capture d'écran est potentiellement de la sécurité, de risque, de penser le long des lignes bancaires-les applications où votre numéro de carte ou de compte résumé sera disponible pour toute personne qui double-cliquez sur le bouton d'accueil sur l'appareil.
N'importe qui avec un aperçu de cette? Merci.
- Ma solution actuelle est à la charge de blanc avec le logo de l'application une fois l'application passe en mode hibernation et de le retirer lors de l'application retourne, mais cette solution est difficile à gérer et ressemble à un hack, plutôt que d'une solution élégante. Aussi, cette solution échoue de temps en temps en fonction de l'appareil etc. Il n'est donc pas vraiment utilisable une.
Vous devez vous connecter pour publier un commentaire.
Dans La préparation de l'INTERFACE pour s'Exécuter en arrière-plan, Apple dit:
Voir Technique Q&UN QA1838: la Prévention des Informations Sensibles Figurant Dans Le Task Switcher
En plus à cacher/remplacement informations sensibles, vous pourriez aussi dire iOS 7 pour ne pas prendre la capture d'écran via
ignoreSnapshotOnNextApplicationLaunch
, dont la documentation dit:Cela dit, il semble que la capture d'écran est toujours pris et j'ai donc déposé un rapport de bogue. Mais vous devez tester plus loin et voir si l'utilisation de ce paramètre permet de.
Si c'est une enterprise application, vous pouvez également regarder dans les paramètres appropriés de
allowScreenShot
décrites dans le Les Restrictions De Charge Utile section de la Profil de Configuration de Référence.Ici est une application qui permet d'obtenir ce dont j'avais besoin. Vous pouvez présenter votre propre
UIImageView
, ou vous pouvez utiliser un délégué-protocole de modèle pour masquer les informations confidentielles:J'ai alors donné mon délégué d'application d'une propriété pour que:
Mon point de vue, contrôleur définit:
La-vue-contrôleur évidemment implémente ce protocole:
Et, enfin, mon délégué d'application se prévaut du présent protocole et de la propriété:
Remarque, je suis en utilisant
applicationWillResignActive
plutôt que le conseilléapplicationDidEnterBackground
, parce que, comme d'autres l'ont souligné, ce dernier n'est pas appelé lorsque un double appui sur le bouton de la maison pendant que l'application est en cours d'exécution.Je souhaite que je pourrais utiliser les notifications pour gérer tout cela, plutôt que de les délégué-protocole de modèle, mais dans mes tests limités, les notifications ne sont pas traitées en temps opportun-assez, mais le schéma ci-dessus fonctionne très bien.
applicationDidEnterBackground
méthode?. mais comment sur de premier plan et de l'utilisateur appuyez sur le bouton accueil bouton 2x, le multitâche et spectacles. mon application n'a pas d'aller au fond encore, d'oùapplicationDidEnterBackground
&applicationWillResignActive
n'est pas appelée.applicationDidEnterBackground
n'est pas appelé, maisapplicationWillResignActive
est (tests sur les deux iOS 7.0.3 appareil et le simulateur). Êtes-vous sûr que vous ne voyez pasapplicationWillResignActive
appelé?ignoreSnapshotOnNextApplicationLaunch
méthode est ignorée si elle n'est pas invoquée au cours de la restauration d'état, tel que décrit ici.UIApplicationWillResignActiveNotification
fait la job dans mon cas. Je n'ai pas voulu voir tous les PopoverViewControllers sur la capture d'écran. Seule chose à prendre soin est de ne rien faire d'animation lors du nettoyage de l'écran, car cela prendrait trop de temps pour la capture d'écran.ignoreSnapshotOnNextApplicationLaunch
est incorrect, que, comme nous l'avons tous constaté, un instantané est effectivement prises, mais ne pourront tout simplement pas être utilisé au lancement suivant.C'est la solution que j'ai travaillé avec mon application:
Que Tommy a dit: Vous pouvez utiliser la applicationWillResignActive. Ce que j'ai fait a été de faire une UIImageView avec mon SplashImage et l'ajouter en tant que sous-vue de ma fenêtre principale-
J'ai utilisé cette méthode au lieu de applicationDidEnterBackground parce que applicationDidEnterBackground ne sera pas déclenché si vous doubletap le bouton home, et applicationWillResignActive sera. J'ai entendu des gens dire que même si elle peut être déclenchée dans d'autres cas aussi, donc je suis encore en test pour voir si il donne de problème, mais aucun à ce jour! 😉
Ici pour supprimer l'imageview:
Espérons que cette aide!
Note: j'ai testé cela sur le simulateur et un périphérique réel: Il ne sera pas affiché sur le simulateur, mais il le fait sur un périphérique réel!
Cette méthode facile et rapide donnera un noir instantané au-dessus de votre icône de l'application dans le iOS7 ou plus tard app switcher.
Tout d'abord, l'application de la clé de la fenêtre (généralement le programme d'installation en AppDelegate.m application:didFinishLaunchingWithOptions), et de le cacher lorsque votre application est sur le point de passer dans l'arrière-plan:
Puis, non-cacher votre application-clés de la fenêtre lorsque votre application devient de nouveau actif:
À ce point, vérifier l'app switcher et vérifiez que vous voyez un noir instantané au-dessus de votre icône de l'application. J'ai remarqué que si vous lancez l'app switcher immédiatement après le déplacement de votre application en arrière-plan, il peut y avoir un délai de 5 secondes où vous pourrez voir un aperçu de votre application (celui que vous voulez cacher!), après quoi il la transition vers un tout-noir instantané. Je ne suis pas sûr de ce que le retard; si quelqu'un a des suggestions, s'il vous plaît carillon.
Si vous souhaitez une autre couleur que le noir dans le commutateur, vous pourriez faire quelque chose comme cela, en ajoutant une sous-vue avec une couleur de fond que vous souhaitez:
Ensuite, retirez cette couleur sous-vue lorsque votre application devient de nouveau actif:
J'ai utilisé la solution suivante:
lors de l'application va démissionner-je obtenir appWindow instantané que d'une Vue et d'ajouter un effet de flou pour elle. Puis-je ajouter ce point de vue à la fenêtre d'application
comment faire:
dans appDelegate juste avant la mise en œuvre, ajoutez la ligne:
ajouter cette méthodes:
faire de votre appDelegate mise en œuvre de la comme suit:
J'ai créé exemples de projets dans Swift et Objective-C.
Les deux projets qui rend les actions suivantes:
-application:didResignActive - création de l'instantané, floues et ajouté à la fenêtre d'application
-application:willBecomeActive flou vue est retiré de la fenêtre.
Comment utiliser:
Objecitve C
Ajouter
AppDelegate+NVSBlurAppScreen
.h et .m des fichiers à votre projetdans votre-applicationWillResignActive: méthode ajoutez la ligne suivante:
dans votre-applicationDidEnterBackground: méthode ajoutez la ligne suivante:
Swift
ajouter AppDelegateExtention.swift fichier à votre projet
dans votre applicationWillResignActive fonction ajouter la ligne suivante:
dans votre applicationDidBecomeActive fonction ajouter la ligne suivante:
si seulement utiliser
[self.window addSubview:imageView];
dansapplicationWillResignActive
fonction, Ce imageView ne couvre pas UIAlertView, UIActionSheet ou MFMailComposeViewController...Meilleure solution est
Donner à ma propre solution comme une "réponses", bien que cette solution est très peu fiable. Parfois, j'obtiens un écran noir comme la capture d'écran, parfois, le XIB et parfois une capture d'écran de l'application elle-même. En fonction de l'appareil et/ou si je l'exécute dans le simulateur.
Veuillez noter que je ne peux fournir le code pour cette solution car elle a beaucoup de app-détails précis, là. Mais cela doit expliquer le sens de base de ma solution.
Vous pouvez utiliser l'activateur pour configurer un double clic du bouton d'accueil pour le lancement de multitâche et de désactiver par défaut en double-cliquant du bouton d'accueil et le lancement de la fenêtre de multitâche. Cette méthode peut être utilisée pour modifier les captures d'écran de l'application par défaut de l'image. Ceci est applicable pour des applications avec un mot de passe par défaut la fonction de protection.
Xamarin.iOS
Adapté de https://stackoverflow.com/a/20040270/7561
Au lieu de simplement afficher une couleur que je voulais montrer mon écran de lancement.