1 page.title=Cmo controlar el nivel de batera y el estado de carga 2 parent.title=Cmo optimizar la duracin de la batera 3 parent.link=index.html 4 5 trainingnavtop=true 6 next.title=Cmo determinar y controlar el tipo de conector y el estado de la conexin 7 next.link=docking-monitoring.html 8 9 @jd:body 10 11 <div id="tb-wrapper"> 12 <div id="tb"> 13 14 <h2>En esta seccin puedes aprender:</h2> 15 <ol> 16 <li><a href="#DetermineChargeState">Cmo determinar el estado de carga actual</a></li> 17 <li><a href="#MonitorChargeState">Cmo supervisar los cambios en el estado de carga</a></li> 18 <li><a href="#CurrentLevel">Cmo determinar el nivel de batera actual</a></li> 19 <li><a href="#MonitorLevel">Cmo supervisar cambios importantes en el nivel de batera</a></li> 20 </ol> 21 22 <h2>Tambin puedes consultar:</h2> 23 <ul> 24 <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a> 25 </ul> 26 27 </div> 28 </div> 29 30 <p>Al modificar la frecuencia de las actualizaciones en segundo plano para reducir el efecto de las mismas en la duracin de la batera, te recomendamos que comiences por comprobar el estado de carga y el nivel actual de la batera.</p> 31 32 <p>El impacto derivado de actualizar aplicaciones en la duracin de la batera vara en funcin del nivel de batera y del estado de carga del dispositivo, mientras que es insignificante cuando este est conectado a la corriente. Por ello, en la mayora de los casos, puedes maximizar la frecuencia de actualizacin cuando el dispositivo est conectado a un cargador. Por el contrario, si el dispositivo est en proceso de descarga, disminuir la frecuencia de actualizacin te permitir aumentar la duracin de la batera.</p> 33 34 <p>Del mismo modo, puedes comprobar el nivel de carga de la batera y reducir la frecuencia de las actualizaciones o incluso detenerlas cuando la batera est a punto de agotarse.</p> 35 36 37 <h2 id="DetermineChargeState">Cmo determinar el estado de carga actual</h2> 38 39 <p>En primer lugar, te recomendamos que determines el estado de carga actual. {@link android.os.BatteryManager} enva los detalles de carga y de la batera en un {@link android.content.Intent} persistente que incluye el estado de carga.</p> 40 41 <p>Se trata de un intento persistente, por lo que no es necesario registrar un {@link android.content.BroadcastReceiver}. Para ello, solo tienes que ejecutar {@code registerReceiver} transmitiendo {@code null} como el receptor (como se muestra en el siguiente fragmento). A continuacin, se devuelve el intento de estado actual de la batera. Puedes transmitir un objeto {@link android.content.BroadcastReceiver} real, pero hablaremos sobre las actualizaciones en otra seccin, por lo que no es necesario ahora.</p> 42 43 <pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 44 Intent batteryStatus = context.registerReceiver(null, ifilter);</pre> 45 46 <p>Puedes extraer el estado de carga actual y, si el dispositivo est cargando, puedes saber tambin si se est usando un cargador de corriente alterna o USB:<p> 47 48 <pre>// Are we charging / charged? 49 int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 50 boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 51 status == BatteryManager.BATTERY_STATUS_FULL; 52 53 // How are we charging? 54 int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 55 boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; 56 boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre> 57 58 <p>Normalmente, debes maximizar la frecuencia de las actualizaciones en segundo plano si el dispositivo est conectado a un cargador de corriente alterna, disminuir esa frecuencia si se utiliza un cargador USB y reducirla an ms si la batera se est descargando.</p> 59 60 61 <h2 id="MonitorChargeState">Cmo supervisar los cambios en el estado de carga</h2> 62 63 <p>Modificar el estado de carga es tan fcil como conectar el dispositivo a un enchufe o USB. Por ello, es importante que supervises el estado de carga por si se producen cambios y modifiques la frecuencia de actualizacin segn corresponda.</p> 64 65 <p>{@link android.os.BatteryManager} emite una accin siempre que el dispositivo se conecta o desconecta de la corriente. Es importante recibir estos eventos aunque la aplicacin no est en ejecucin (especialmente porque estos eventos pueden afectar a la frecuencia con la que inicias tu aplicacin para actualizarla en segundo plano), por lo que debes registrar un {@link android.content.BroadcastReceiver} en tu archivo de manifiesto para detectar ambos eventos definiendo {@link android.content.Intent#ACTION_POWER_CONNECTED} y {@link android.content.Intent#ACTION_POWER_DISCONNECTED} en un filtro de intentos.</p> 66 67 <pre><receiver android:name=".PowerConnectionReceiver"> 68 <intent-filter> 69 <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/> 70 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/> 71 </intent-filter> 72 </receiver></pre> 73 74 <p>En la implementacin de {@link android.content.BroadcastReceiver} asociada, puedes extraer el mtodo y el estado de carga actual como se describe en el paso anterior.</p> 75 76 <pre>public class PowerConnectionReceiver extends BroadcastReceiver { 77 @Override 78 public void onReceive(Context context, Intent intent) { 79 int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 80 boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || 81 status == BatteryManager.BATTERY_STATUS_FULL; 82 83 int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 84 boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB; 85 boolean acCharge = chargePlug == BATTERY_PLUGGED_AC; 86 } 87 }</pre> 88 89 90 <h2 id="CurrentLevel">Cmo determinar el nivel de batera actual</h2> 91 92 <p>En algunos casos, tambin es til determinar el nivel de batera actual. Puedes disminuir la frecuencia de las actualizaciones en segundo plano si el nivel de carga de la batera es inferior a un valor determinado.</p> 93 94 <p>Puedes consultar la carga actual de la batera extrayendo el nivel actual de la batera y subir a partir del intento de estado de batera, como se muestra a continuacin:</p> 95 96 <pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 97 int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 98 99 float batteryPct = level / (float)scale;</pre> 100 101 102 <h2 id="MonitorLevel">Cmo supervisar cambios importantes en el nivel de batera</h2> 103 104 <p>No puedes controlar el estado de la batera de forma continua fcilmente, pero tampoco es necesario.</p> 105 106 <p>En trminos generales, el impacto sobre la batera derivado de controlar continuamente el nivel de batera es mayor que el comportamiento habitual de la aplicacin. Por ello, te recomendamos que supervises nicamente los cambios en el nivel de batera ms significativos, especialmente cuando el dispositivo tenga poca batera o acabe de cargarse.</p> 107 108 <p>El fragmento de manifiesto que aparece a continuacin se ha extrado del elemento de filtro de intento de un receptor de emisin. El receptor detecta {@link android.content.Intent#ACTION_BATTERY_LOW} y {@link android.content.Intent#ACTION_BATTERY_OKAY} y se activa cuando el nivel de batera del dispositivo es bajo o cuando se sale de un estado bajo de batera.</p> 109 110 <pre><receiver android:name=".BatteryLevelReceiver"> 111 <intent-filter> 112 <action android:name="android.intent.action.ACTION_BATTERY_LOW"/> 113 <action android:name="android.intent.action.ACTION_BATTERY_OKAY"/> 114 </intent-filter> 115 </receiver></pre> 116 117 <p>Cuando la batera est a punto de agotarse, te recomendamos que inhabilites las actualizaciones en segundo plano. Si el telfono se apaga antes de poder utilizar las aplicaciones, no importa que tengan los datos actualizados.</p> 118 119 <p>En muchos casos, el hecho de cargar un dispositivo coincide con la accin de utilizar un conector. En la prxima seccin, hablaremos sobre cmo determinar el estado de conexin actual y cmo supervisar los cambios que se produzcan al conectar el dispositivo.</p> 120 121