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:

  1. 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.

  1. Est-il possible de prendre une photo sans l'aide d'un aperçu de surface d'affichage?
  2. 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?
  3. 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!

Une raison quelconque vous ne faites pas tout cela dans votre service ?
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