2010-11-09 8 views

Respuesta

11

La respuesta anterior (por API 21 y superior) es no exactamente correcto. Usted debe registrar un receptor en su actividad o servicio como este:

BroadcastReceiver powerSaverChangeReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     checkPowerSaverMode(); 
    } 
}; 

IntentFilter filter = new IntentFilter(); 
filter.addAction("android.os.action.POWER_SAVE_MODE_CHANGED"); 
registerReceiver(powerSaverChangeReceiver, filter); 

La razón de esto es que los receptores de manifiesto no son provocados por esta emisión.

ACTION_POWER_SAVE_MODE_CHANGED

Intención que se emite cuando el estado de isPowerSaveMode) cambios (. Esta transmisión solo se envía a los receptores registrados.

He probado esto y funciona.

+0

¿Hay alguna manera de simplemente verificar si el dispositivo está en modo de ahorro de energía? – jmrodrigg

+0

@jmrodrigg solo puede usar '' 'PowerManager pm = (PowerManager) context.getSystemService (Context.POWER_SERVICE); boolean powerSave == m.isPowerSaveMode(); '' ' – nattster

+0

@nattster ¡Gracias! – jmrodrigg

1

¿Cómo se puede crear un oyente de Android para realizar una tarea justo antes de ingresar al modo de ahorro de energía?

No hay emisión Intent para esto. El más cercano es ACTION_SCREEN_OFF. Es probable que el dispositivo se quede dormido en el futuro cercano después de recibir esta transmisión. Y, solo puede escuchar esta transmisión usando un BroadcastReceiver registrado a través de registerReceiver() en una actividad o servicio u otro Context.

También: ¿Cuáles son algunas de las opciones de bajo consumo que se pueden controlar con esta tarea?

No tengo idea de lo que esto significa, lo siento.

+0

La pantalla apagada es una parte del ahorro de energía que se puede desactivar en Configuración> Aplicaciones> Desarrollo. ¿Pueden otras aplicaciones de ahorro de energía, como cerrar la interfaz de la tarjeta microSD, controlarse mediante una aplicación? – jacknad

+0

@JackN: No estoy seguro de lo que piensas que es "cerrar la interfaz de la tarjeta microSD". Consulte 'android.provider.Settings.System' para ver el tipo de cosas que puede controlar. Más allá de esa lista, no hay nada relacionado con el poder que pueda pensar en las líneas en las que pareces estar interesado. – CommonsWare

7

Dado que Lollipop (API 21) hay PowerManager#ACTION_POWER_SAVE_MODE_CHANGED intención de transmisión.

por lo que necesita sólo para recibirlo:


AndroidManifest.xml:

<receiver android:name=".observers.PowerSaveModeReceiver"> 
    <intent-filter> 
     <action android:name="android.os.action.POWER_SAVE_MODE_CHANGED"/> 
    </intent-filter> 
</receiver> 


PowerSaveModeReceiver.java:

public class PowerSaveModeReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     if (BuildConfig.DEV_LOGS) 
      Log.d(this.getClass().getName(), String.format("onReceive(context = [%s], intent = [%s])", context, intent)); 

     final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     if (pm.isPowerSaveMode()) { 
      // do something 
     } else { 
      // do some else 
     } 
    } 
} 
+0

¿Funciona para ti? Está escrito en los documentos "Esta transmisión solo se envía a los receptores registrados". ... –

Cuestiones relacionadas