Android - Comment puis-je réveiller le téléphone à partir d'une unité de sommeil pour prendre une photo?
Je veux prendre des photos à partir de l'Android appareil photo périodiquement sur une question d'heures, de créer un laps de temps l'effet vidéo.
J'ai mis une Alarme Manager avec un AlarmManager.RTC_WAKEUP indicateur est défini pour démarrer un service, toutes les quelques minutes.
Le service est titulaire d'un partiel wakelock, fait un peu de travail, puis appelle un Récepteur de Radiodiffusion par le biais de l'Alarme Manager qui démarre une Activité.
L'activité est créée (ou la reprise), tourne sur son propre wakelock, et met en place l'aperçu de l'appareil photo surface. Une fois la surface d'installation de la SurfaceHolder de l'auditeur surfaceChanged() la méthode est appelée, ce qui, finalement, prend une photo.
Si l'appareil est éveillé, tout fonctionne parfaitement comme prévu. Mais si l'appareil est en veille, une fois que l'Activité est onResume() la méthode est fini de l'Activité est immédiatement suspendu. La caméra aperçu de surface jamais fini de s'initialiser, et aucune image ne sera jamais pris.
Donc les questions que j'ai sont:
- Est-il un moyen de réveiller le téléphone par programmation? J'ai même essayer en utilisant:
PowerManager powerManager = (PowerManager)this.getSystemService(Context.POWER_SERVICE); powerManager.userActivity(SystemClock.currentThreadTimeMillis(),false);
Mais cela ne veut pas réveiller le téléphone s'il est endormi.
- Est-il possible de prendre une photo sans l'aide d'un aperçu de surface d'affichage?
- Est-il un moyen de prendre une photo qui ne repose pas sur des rappels asynchrones? Puis-je mettre tout le code dans les Activités onResume() la méthode pour prendre une photo?
- Est-il possible de maintenir l'Activité de l'onResume() la méthode de course assez longue pour que l'appareil photo aperçu a assez de temps pour initialiser et d'appeler tous les auditeurs?
Je suis en utilisant le wakelocks correctement, et j'ai toutes les permissions est bien défini dans le fichier de manifeste. Mon activité n'est pas maintenu éveillé assez longtemps pour que l'asynchrone auditeurs pour fonctionner correctement.
Et pour aggraver le problème, j'essaie de garder tout Android 1.6 compatible, parce que c'est le seul appareil de test, j'ai accès.
C'est frustrant de choses!
Il a été un moment depuis que cette question, donc je ne suis pas sûr à 100%. Je ne pense pas que les services s'exécutent lorsque le téléphone est dans un sommeil, c'est pourquoi j'ai dû utiliser le Gestionnaire d'Alarme pour réveiller le téléphone en premier.
Si vous parvenez à exécuter le service (il y a un moyen) - est-il nécessaire de faire tous les trucs que vous faites dans l'Activité dans l'Activité ? Cause si ce n'est je crois que j'ai la réponse
OriginalL'auteur Paul Klemstine | 2011-03-07
Vous devez vous connecter pour publier un commentaire.
J'ai finalement trouvé quelque chose maintenant.
J'ai créer un wakelock à l'aide de ces deux indicateurs
Puis l'appareil se réveille et commence à le verrouillage de l'écran.
Mais la seule façon que je peux obtenir passé le verrouillage de l'écran et de prendre une photo est à l'utilisation de ces indicateurs sur l'Activité de la fenêtre:
Mais ce n'est disponible qu'avec Android 2.0, et ne fonctionne pas en 1.6.
OriginalL'auteur Paul Klemstine
Vous pouvez également désactiver le Verrouillage du clavier de l'écran avec
à condition d'avoir les DISABLE_KEYGUARD autorisation.
Qui est disponible depuis l'API de Niveau 1.
OriginalL'auteur c2u
Vous faites quelque chose comme cela dans votre méthode onResume
Si donc, dès que la sortie de la méthode, le WakeLock est libéré, et l'appareil est libre de faire ce qu'il a envie de faire ( ce qui est susceptible de se rendormir )
et vous aurez besoin pour stocker le WakeLock dans la classe, quelque part, pas comme une fonction locale.
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "ActivityWakeLock"); wl.acquire();
OriginalL'auteur Dre