Bildschirm unter Android ausschalten

Ich versuche, das Display nach einer bestimmten Aktion ein- und auszuschalten (Lasst uns nur sorgen, dass wir den Bildschirm jetzt ausschalten). Von dem, was ich von Wake Lock verstehe, habe ich Folgendes:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag"); 

Wenn ich andere Beiträge auf stackoverflow und anderswo lese, scheinen sie mir zu sagen, dass PARTIAL_WAKE_LOCK den Bildschirm ausschaltet. Aber wenn ich das SDK lese, sagt es, dass es nur den Bildschirm abschalten lässt. Also ich denke, das ist nicht richtig.

Alle Hinweise wären hilfreich! Vielen Dank,

Mike

   

    Es gibt zwei Möglichkeiten den Bildschirm auszuschalten:

     PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE); // Choice 1 manager.goToSleep(int amountOfTime); // Choice 2 PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag"); wl.acquire(); wl.release(); 

    Sie werden wahrscheinlich auch diese Erlaubnis benötigen:

      

    AKTUALISIEREN:

    Versuchen Sie diese Methode; Android schaltet den Bildschirm aus, sobald das Lichtniveau niedrig genug ist.

     WindowManager.LayoutParams params = getWindow().getAttributes(); params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; params.screenBrightness = 0; getWindow().setAttributes(params); 

    Folgendes wird aus dem SDK-Dokument kopiert. Wenn Sie den Bildschirm eingeschaltet lassen wollen, ist SCREEN_BRIGHT_WAKE_LOCK ausreichend.


     Flag Value CPU Screen Keyboard 

     PARTIAL_WAKE_LOCK On* Off Off SCREEN_DIM_WAKE_LOCK On Dim Off SCREEN_BRIGHT_WAKE_LOCK On Bright Off FULL_WAKE_LOCK On Bright Bright 

    Für mich haben diese Methoden nicht funktioniert. Also habe ich ein anderes Szenario (nicht trivial) benutzt, um meinen Bildschirm auszuschalten.

    Android hat 2 Flags, die dafür verantwortlich sind, wach zu sein:

    • Anzeige -> Bildschirm TimeOut
    • Anwendung -> Entwicklung -> Bleib wach beim Laden Kontrollkästchen.

    Ich habe folgenden Flow verwendet:

    1. Vor allem speichern Sie Ihre vorherige Konfiguration, zum Beispiel Bildschirm-Timeout war 1 Minute und Bleib wach während des Ladevorgangs überprüft.

    2. Danach deaktiviere ich das Kontrollkästchen Während des Ladevorgangs wach bleiben und das Bildschirm-Timeout auf eine minimale Zeit einstellen.

    3. Ich registriere mich, um Empfangsdienst zu senden, um Ereignis von Android zu erhalten, dass Schirm abstellte.

    4. Wenn ich das Ereignis auf dem Bildschirm ausgeschaltet habe, habe ich die vorherige Konfiguration auf die Standardeinstellung zurückgesetzt: das Bildschirm-Timeout betrug 1 Minute und Bleib wach, während der Ladevorgang überprüft wurde.

    5. Empfänger abmelden

    Nach 15 Sek. Gerät schläft

    Hier sind Codeschnipsel:

    Rundfunkempfänger

     import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; /** * Catch Screen On/Off * */ public class BroadcastReceiverScreenListener extends BroadcastReceiver{ private BroadCastListenerCallBackItf mBroadCastListenerCallBack = null; public BroadcastReceiverScreenListener( BroadCastListenerCallBackItf broadCastListenerCallBack) { this.mBroadCastListenerCallBack = broadCastListenerCallBack; } @Override public void onReceive(Context arg0, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { mBroadCastListenerCallBack.broadCastListenerCallBack__ScreenOff_onResponse(); } } } 

    Schnittstelle als callback verwendet

     public interface BroadCastListenerCallBackItf { public void broadCastListenerCallBack__ScreenOff_onResponse(); } 

    2 Methoden aus der Hauptklasse:

     .... AndroidSynchronize mSync = new AndroidSynchronize(); .... public void turnScreenOff(int wait){ IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadCastListenerCallBackItf broadCastListenerCallBack = this; BroadcastReceiver mReceiver = new BroadcastReceiverScreenListener(broadCastListenerCallBack); m_context.registerReceiver(mReceiver, filter); //set Development --> disable STAY_ON_WHILE_PLUGGED_IN Settings.System.putInt( m_context.getContentResolver(), Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0 ); // take current screen off time int defTimeOut = Settings.System.getInt(m_context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 3000); // set 15 sec Settings.System.putInt(m_context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 15000); // wait 200 sec till get response from BroadcastReceiver on Screen Off mSync.doWait(wait*1000); // set previous settings Settings.System.putInt(m_context.getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, defTimeOut); // switch back previous state Settings.System.putInt( m_context.getContentResolver(), Settings.System.STAY_ON_WHILE_PLUGGED_IN, BatteryManager.BATTERY_PLUGGED_USB); m_context.unregisterReceiver(mReceiver); } public void broadCastListenerCallBack__ScreenOff_onResponse() { mSync.doNotify(); } .... 

    AndroidSynchronize-class

     public class AndroidSynchronize { public void doWait(long l){ synchronized(this){ try { this.wait(l); } catch(InterruptedException e) { } } } public void doNotify() { synchronized(this) { this.notify(); } } public void doWait() { synchronized(this){ try { this.wait(); } catch(InterruptedException e) { } } } } 

    [BEARBEITEN]

    Sie müssen die Berechtigung registrieren:

     android.permission.WRITE_SETTINGS 

    Über diesen Link können Sie den Bildschirm auch so abschalten:

     Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000); 

    1000 ist in Millisekunden, was 1 Sekunde bedeutet, Sie können es durch irgendeinen Wert wie gewünscht ersetzen.

    Benötigte Erlaubnis:

      

    versuchen – wakeLock.acquire (1000); // gib die Zeit an, sie wird abgeblendet und schaltet sich schließlich aus.