Ich spiele mit der Task-Sperr-API auf einem Nexus 4 mit Android 5.0.1 herum. Meine Gerätebesitzer-App besteht aus zwei Schaltflächen: "Sperren" und "Entsperren", die einfach startLockTask()
und stopLockTask()
aufrufen. Das ist wirklich alles, aber da einige Leute darauf bestehen, das Muster zu sehen:
Das Drücken der "Lock" -Taste, wenn die Aufgabe bereits abgeschlossen ist, ist harmlos. Aber wenn ich die Schaltfläche "Entsperren" drücke, wenn die Aufgabe nicht gesperrt ist, bekomme ich eine NPE:
%Vor%Gibt es irgendwo eine Methode, um zu testen, ob die aktuelle Aufgabe gesperrt ist?
Dies ist eine Art, wie unregisterReceiver (... ) explodiert, wenn Sie versuchen, die Registrierung eines nicht registrierten Empfängers aufzuheben. Ich denke, es ist eine schlecht erzogene API, die Sie zwingt, den internen Zustand dafür zu verfolgen. Aber stopLockTask()
ist sogar noch schlimmer, denn während Sie Ihre Empfänger normalerweise abmelden würden, wenn Ihre Aktivität pausiert ist, würden Sie Ihre Aufgabe normalerweise nicht entsperren. Die nächste Aktivität wird also gesperrt erstellt, aber sie kann nicht wissen, dass sie gesperrt ist. Sie müssen also den gesperrten Zustand in Intents und gespeicherten Instanz-Bundles im Grunde passieren. Oder umkreist einfach jeden Aufruf von stopLockTask()
mit einem hässlichen try
/ catch
...
Machen Sie hier einen Sinn?
Bearbeiten: Erstellt Problem # 150089 .
Sie müssen die anderen Methoden des Lebenszyklus implementieren (OnResume, OnStop usw.).
Setzen Sie Ihre Logik, um die Anwendung in einer anderen Methode zu entsperren, die Sie herausfinden, welche besser ist, je nach Ihrem erwarteten Verhalten. Sehen Sie sich dies [link] an. 1
Tags und Links android android-screen-pinning