Meine Anwendung enthält vertrauliche Benutzerinformationen, und wir müssen einen Passcode-Bildschirm implementieren, der immer dann angezeigt wird, wenn der Benutzer die Anwendung öffnet. Hier sind die zwei Ansätze, die ich versucht habe, nachdem ich diesen Beitrag gelesen habe.
Verwenden Sie eine statische Variable und setzen Sie sie in onStop()
jeder Aktivität zurück und überprüfen Sie sie erneut in onStart()
jeder Aktivität und zeigen Sie den Passcode-Bildschirm an, wenn die Zeit eine Mindestschwelle von 1-2 Sekunden überschritten hat. Das Problem bei diesem Ansatz besteht darin, dass meine Anwendung auch Absichten zum Aufrufen von Kamera- und Strichcode-Scannern verwendet und die Benutzer längere Zeiträume in diesen externen Apps verbringen. Ich kann die Schwelle in diesem Fall erhöhen, aber es macht die Berechnungen kompliziert und ist keine sehr gute Lösung.
Ich habe den anderen Ansatz mit dieser Methode versucht.
%Vor%Aber dies wird immer true zurückgeben, wenn ich in der onStart-Methode jeder Aktivität danach suche, da der Prozess bereits zu dem Zeitpunkt gestartet wurde, an dem er in onStart
istGibt es einen anderen Ansatz, mit dem ich einen Code anzeigen kann, wenn der Benutzer die Anwendung öffnet? Es sollte auch dann angezeigt werden, wenn der Benutzer auf den Startbildschirm klickt, um die App zu verlassen, und dann von den letzten Apps zur App zurückkehrt.
Ich habe diese genaue Funktion implementiert. Ich habe im Wesentlichen Ihre # 1, aber auf eine etwas sauberere Art und Weise.
Ich habe eine abstrakte Unterklasse von Activity
geschrieben und onResume()
überschrieben. Dort entscheiden Sie, ob Sie den Pin Lock Bildschirm anzeigen müssen. Wenn Sie dies tun, beenden Sie sich selbst und starten Sie die Pin-Lock-Aktivität. Lassen Sie alle Aktivitäten Ihre Aktivität erweitern.
Um sich daran zu erinnern, wo Sie waren, können Sie der Absicht, die zum Starten der PIN-Sperraktivität verwendet wird, eine zusätzliche "Startabsicht" hinzufügen. Wenn die App entsperrt ist, kann die Pin-Lock-Aktivität dieses Extra verwenden, um den Benutzer direkt dorthin zurückzubringen, wo er war.
Wenn Ihre App auf Fragmenten basiert, wäre das einfach. Wenn die Aktivität, die alle Fragmente enthält, wieder aufgenommen wird, zeigen Sie das Pin-Lock-Fragment an. das ist alles.
Das Problem mit einer App, die aus einer Reihe von Aktivitäten besteht, ist, dass es keinen eindeutigen Zeitpunkt für das "Starten" der App gibt. Das Konzept existiert nicht. Dies ist im Wesentlichen das Problem, das Sie mit Ihrer Lösung Nr. 1 gefunden haben. onResume()
scheint eine gute Wahl zu sein, aber das kann aus vielen Gründen aufgerufen werden. Beispielsweise startet der Benutzer die Aktivität A, die die Aktivität B startet. Jetzt drücken sie zurück. Zeige die Pin-Sperre, oder nicht?
Jede Lösung, die einen Thread verwendet, der Vordergrundprozesse überprüft, ist eine schreckliche Idee wegen der Auswirkungen der Batterie.
Schließlich möchten Sie vielleicht die Anforderung einer PIN-Sperre jedes Mal in Frage stellen, wenn die App in den Vordergrund gebracht wird. es scheint übertrieben, wenn ich hüpfe, um eine SMS zu lesen und 10s später zurück zu kommen, bin ich gezwungen, einen Stift wieder einzugeben. Zeit basiert scheint angemessener.
Tags und Links android