2011-01-17 5 views
1

Ich habe eine App, die Text zu Sprache verwendet, um den Benutzer alle 10 Minuten zu informieren, dass 10 Minuten vergangen sind. Es funktioniert derzeit gut, aber wenn Sie das Telefon schlafen (drücken Sie den Netzschalter) spielt es nicht mehr den Ton.Text zu Sprache, wenn das Telefon schläft - Android

Wie kann ich diese Töne auch dann wiedergeben, wenn das Telefon schläft?

+1

Nur laut nachdenken, also nicht als Antwort, aber wenn Sie einen Service verwenden würde das nicht funktionieren? – C0deAttack

+0

Vielleicht habe ich das nicht untersucht. Ich frage mich nur, ob es einfach gemacht werden kann. – CeejeeB

+1

Sollte nicht denken, dass es schwierig wäre. Viele Dienste laufen, während das Telefon schläft, die Töne spielen, zum Beispiel der Musik-Player. – C0deAttack

Antwort

4

Im Allgemeinen wird Ihr Code nicht ausgeführt, wenn Divice in den Ruhezustand versetzt wird. Um Ihren Code zum Laufen zu bringen, müssen Sie WakeLock von PowerManager erwerben. Aber in Ihrem Fall müssen Sie das WakeLock nicht ständig erwerben. Sie müssen Ihre Anwendung alle 10 Minuten wecken. Sonst isst deine App nur Batterien, die nichts tun.

Um Ihre Anwendung regelmäßig zu wecken, müssen Sie ein spezielles Android AlarmManager verwenden. Hier

ein Beispiel:

Intent myIntent = new Intent(getApplicationContext(), YourActivity.class);  
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 1, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, interval, pendingIntent); 

Sie auch Broadcast senden können, die Sie in Ihrem Service verarbeiten wird (wenn Sie nicht Aktivität verwenden möchten).

BEARBEITEN: Die Wiedergabe startet nur, wenn Sie explizit SCREEN_DIM_WAKE_LOCK erstellen. Beachten Sie, dass PARTIAL_WAKE_LOCK bei der Wiedergabe nicht funktioniert (warum nicht, wahrscheinlich ist es ein Fehler).

PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE); 
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Music"); 
wakeLock.acquire(); 
...start playback... 
wakeLock.release(); 

EDIT: hinzugefügt Projekt, das alle 60 Sekunden (auch wenn der Bildschirm ausgeschaltet ist und USB-Kabel ist nicht angeschlossen) ein Beispiel des Betriebs einer Wiedergabe zeigt. Es kann hier gefunden werden: http://code.google.com/p/playevery60/

+1

Mein Code wird ausgeführt, wenn er schläft, da er mehr tut, als nur den Ton wiederzugeben. Aber das ist ein interessantes Konzept, um das Telefon zu wecken. – CeejeeB

+0

Woher wissen Sie, dass der Code ausgeführt wird? Wie genau kannst du das sagen? Beachten Sie, dass wenn Sie Ihr Telefon über USB mit dem Computer verbinden, es nicht in den Schlafmodus wechselt, auch wenn der Bildschirm ausgeschaltet ist. – inazaruk

+0

Da es auch Berechnungen auf Basis von GPS-Co-Orden durchführt, müssen diese jede Sekunde ausgeführt werden. Ich habe dies an einem Telefon getestet, das nicht an einen Computer angeschlossen ist, und die Berechnungen sind korrekt, d. H. Es muss im Schlaf ausgeführt werden. – CeejeeB