2010-11-21 5 views
0

ich die Fähigkeit, den Benutzer meiner Anwendung zur Verfügung stellen möchten den Bildschirm zu halten, auf einen WakeLock verwenden. In meiner Haupttätigkeit habe ich die folgende Funktion erstellt:Wie implementiere Sie sicher WakeLock über mehrere Aktivitäten

protected void processWakeLock(int pauseResume) { 
    switch (pauseResume) { 
    case STATE_RESUME: 
     if (mKeepScreenOn) { 
     wakeLock.acquire(); 
     } 
     break; 
    case STATE_PAUSE: 
     if (wakeLock.isHeld()) { 
     wakeLock.release(); 
     } 
     break; 
    } 
} 

ich zur Zeit aus meinen und onResume Überschreibungen nenne, da ich sicher machen will verursache ich nicht eine Sperre auf dem Telefon des Benutzers, wenn sie nicht meine Anwendung aktiv nutzen. Meine Anwendung hat 3 weitere Vollbildansichten. Was ist der beste Weg, um sicherzustellen, dass ihre WakeLock überträgt sich auf alle Teile meiner Anwendung, während immer noch sicher für den Rest ihres Telefons.

Mein erster Gedanke ist, den gleichen Code-Schnipsel in jedem meiner Aktivitäten zu duplizieren aber, dass wie viele Kesselblech scheint. Ich kann onStart und onStop entweder nicht verwenden, weil die Sichtbarkeit verloren geht, wenn ich zu einer anderen Vollbildaktivität umschalte. Obwohl es vielleicht besser wäre

Basierend auf dem Diagramm und Informationen hier (http://developer.android.com/guide/topics/fundamentals.html) Ich sehe keinen besseren Weg, um das Schloss zu verwenden.

Antwort

5

Verwenden Sie eine nicht WakeLock - das ist mehr für Dienstleistungen und erfordert, dass Sie eine zusätzliche Erlaubnis zu halten.

Verwenden Sie stattdessen setKeepScreenOn() auf einige View in Ihrer Tätigkeit. Rufen Sie, dass in onCreate() basierend auf einem SharedPreference oder Intent zusätzliche, je nachdem, wie Sie die Einstellung sammeln.

+0

Also, wenn es angemessen wäre, ein 'WakeLock' – Thomas

+1

@Thomas zu verwenden: In einer' Service'. Es macht keinen Sinn, dies in einer 'Activity' zu tun, da' setKeepScreenOn() 'auf' View' existiert. – CommonsWare

+0

Es ist bedauerlich, dass 'setKeepScreenOn()' nicht das gleiche Verhalten wie ein 'SCREEN_DIM_WAKE_LOCK' hat – Thomas