Je me demandais si quelqu'un avait compris comment afficher votre application lorsque vous déverrouillez l'écran. J'ai une application où l'utilisateur allume un appareil Bluetooth, il se connecte au téléphone, et l'utilisateur doit présenter une interface utilisateur. Les faire chasser pour l'application ou utiliser le menu de notification n'est pas une option réalisable (trop de travail et pas le comportement évident).Android L'activité s'affiche après le déverrouillage de l'écran par l'utilisateur
Le problème est que: Lorsque l'écran est déverrouillé: - vous pouvez PopUp l'activité du service d'arrière-plan lorsque Bluetooth se connecte à un appareil - L'utilisateur est heureux parce que l'interface utilisateur est là
Lorsque la écran est verrouillé: - l'application se met en marche, mais est détruite - l'utilisateur déverrouille le téléphone et rien est là, mais l'écran d'accueil
Un travail autour serait de désactiver le verrouillage du clavier lorsque l'application se réveiller, mais l'option nucléaire est une très mauvaise option.
PS: Je sais que l'hypothèse standard Android est que vous ne devriez pas faire cela. Dans le cas normal ce comportement est correct, mais dans ce cas j'ai explicitement fait quelque chose que je veux que le téléphone réponde sans ajouter plus de travail pour l'utilisateur. Selon les directives de Google si vous n'aimez pas ce comportement, vous pouvez désactiver cette option ou vous ne pouvez pas utiliser l'application.
quelques détails, donc après avoir regardé ce un peu plus le problème est pas nécessairement que vous ne pouvez pas avoir une activité en cours d'exécution lorsque l'écran est verrouillé, déverrouillez et attendez qu'il attend. Cela ne fonctionne que si vous faites quelque chose comme ce qui suit:
- verrouiller votre appareil
- exécuter une application via Eclipse lorsque le téléphone est verrouillé/arrêt
- déverrouiller et il vous attend
Mais dans le cas où l'activité est déjà en cours d'exécution et que je prépare une nouvelle fenêtre (qui est transparente, en disant que vous êtes connecté et en demandant ce que vous voulez faire). Le problème est qu'il est tué
E/BackgroundPOPUP(2436): POPUP created via onCreate! I/UsageStats( 78): Unexpected resume of com.test.POPUP while already resumed in com.android.launcher2 E/BackgroundPOPUP(2436): POPUP onPause E/MyBacgrkoundService(2436): POPUP active! I/ActivityManager( 78): Displayed activity com.test.POPUP/.PopupTest: 175 ms (total 175 ms) I/UsageStats( 78): Something wrong here, didn't expect com.android.launcher2 to be paused E/BackgroundPOPUP(2436): POPUP has ended through a call to onStop E/BackgroundPOPUP(2436): POPUP has ended through a call to onDestroy
La configuration est ici comme suit:
MyBackgroundService
est un serivce qui gère l'état Bluetooth (temps d'attente pour les connexions, permet d'activer Bluetooth si l'utilisateur démarre l'application, etc.). Il déclenche une activitéBackgroundPOPUP
qui exécute un ViewFlipper.MyBackgroundService
commenceBackgroundPOPUP
à travers une intention.BackgroundPOPUP
est une activité avec un thème Translucide (Theme.Translucent pour être précis), il montre un ViewFlipper avec quelques instructions et présente quelques options
Merci! Je n'étais pas au courant du inKeyguardRestrictedInputMode(), cela aide. J'ai ajouté un peu plus de détail ci-dessus, donc j'aimerais pouvoir faire en sorte que la fenêtre d'activité attende l'utilisateur quand il l'utilise mais il semble juste qu'il se fasse tuer. Je pensais que vous ne pouviez pas faire cela du tout avec une activité, mais cela semble fonctionner quand vous créez un processus. C'est peut-être parce que c'est une fenêtre transparente, donc je vais vérifier. Android semble les traiter différemment dans certains cas, alors c'est peut-être le vrai problème. – Dave
Après avoir joué un peu avec ça, je n'ai pas réussi à trouver quelque chose qui fonctionnait de manière naïve. c'est-à-dire que vous dites 'startActivity' et indépendamment du fait que l'écran était allumé/verrouillé/éteint, l'utilisateur verrait l'activité (peut-être quand il a déverrouillé l'écran). L'activité serait détruite si l'écran était éteint/verrouillé, ce que j'ai fait était de déclencher une méthode statique qui vérifie si le clavier est activé. Si c'est le cas, il attend que l'utilisateur déverrouille l'écran pour envoyer l'intention startActivity. En ce moment j'utilise une minuterie mais je vais passer à ACTION_USER_PRESENT dans un peu. – Dave