2010-04-05 4 views

Antwort

3

Wenn Sie einen Dienst haben, die es aktiv Sie diese Ereignisse mit

registerReceiver(new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    // do something 
    } 
}, new IntentFilter(Intent.ACTION_SCREEN_ON)); 

fangen kann jedoch setzt dies einen ständig laufenden Dienst auf, die ich vor kurzem gelernt haben abgeraten, da es spröde ist (das OS mag an schließe sie) und benutzt ständig Ressourcen.

Enttäuschenderweise scheint es nicht möglich, einen Empfänger in Ihrem Manifest zu haben, der SCREEN_ON-Ereignisse abfängt.

Dies hat vor kurzem kommen:

android.intent.action.SCREEN_ON doesn't work as a receiver intent filter

auch

Android - how to receive broadcast intents ACTION_SCREEN_ON/OFF?

+0

ah danke, damit wird der Bildschirm erkennen und mir erlauben, richtig damit umzugehen, richtig? Ich habe Ihren Thread gelesen und empfehle Ihnen nicht, einen Hintergrunddienst laufen zu lassen und darauf zu warten, dass das Telefon aufwacht. Warum? Was ist der Nachteil und gibt es einen Weg herum? Führt Sie keine Hintergrunddienste wie Sie solche Ereignisse erkennen? – Joe

+0

Dieser Artikel beschreibt das Hintergrund-Service-Problem - http://www.androidguys.com/2010/03/29/code-pollution-background-control/ –

+0

das Problem mit dieser Antwort, egal, warum es funktioniert, ist, weil Ihre Aktivität empfängt keine Absichten, wenn das Telefon schläft. Sie können screen_on in Ihrer Aktivität registrieren, aber Sie werden es nie bekommen. –

0

Sie sind direkt am Rundfunkempfänger. Sie können die Broadcast-Ereignisse SCREEN_ON und SCREEN_OFF abhören.

3

Sie könnten auch einen Broadcast-Empfänger haben, der die Broadcastabsicht USER_PRESENT abfängt, wenn der Benutzer das Gerät entsperrt hat. Natürlich respektieren einige Versionen von Honeycomb dies nicht, aber für alle nicht hirntoten Versionen von Android (2.x und 4.x) funktioniert es gut.

+1

Dies funktioniert auch, wenn Sie sich bei AndroidManifest.xml registrieren. – bk138