studio - Cuando los incendios de Android ACTION_BATTERY_LOW
start broadcast receiver android (2)
Esa intención se dispara desde BatteryService. Tendrás que analizar el código un poco, pero estoy bastante seguro de que no se activará repetidamente:
http://gitorious.org/android-eeepc/base/blobs/fda6fae156e31a287e3cfbf66e51ea1405cdf479/services/java/com/android/server/BatteryService.java
Los valores reales en los que se activan se configuran en los recursos de Android, por lo que solo se pueden configurar durante la compilación del sistema. Esto es lo que tenemos para nuestro hardware, pero probablemente será diferente para cada plataforma de hardware en la que se ejecute Android:
<!-- Display low battery warning when battery level dips to this value -->
<integer name="config_lowBatteryWarningLevel">15</integer>
<!-- Close low battery warning when battery level reaches this value -->
<integer name="config_lowBatteryCloseWarningLevel">20</integer>
A menos que esté desarrollando una plataforma de hardware personalizada, no haría ninguna suposición sobre en qué se configuran estos valores.
En mi aplicación, quiero hacer algo cuando la batería está baja. Cuando la batería está baja, Android dispara ACTION_BATTERY_LOW
y cuando la batería vuelve a alcanzar su buena salud, dispara el intento ACTION_BATTERY_OKAY
. Entonces, tengo tres preguntas con respecto a esto:
1. ¿En qué porcentaje de batería Android realmente dispara ACTION_BATTERY_LOW
?
2. ¿Lanza el mismo evento repetidamente si la batería es aún más baja?
3. ¿Podemos configurar el porcentaje de batería en el que Android activará ACTION_BATTERY_LOW
intento?
Estoy más preocupado por el tercer punto.
No, no puede establecer cuándo se enviará el umbral ACTION_BATTERY_LOW. Esa es una intención de nivel de sistema especificada por la ROM de Android. Aquí está el código donde establece el valor en el Servicio de batería:
mLowBatteryWarningLevel = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryWarningLevel);
Vea el siguiente código que se corta del código del sistema Android en el método de actualización del Servicio de batería:
/* The ACTION_BATTERY_LOW broadcast is sent in these situations:
* - is just un-plugged (previously was plugged) and battery level is
* less than or equal to WARNING, or
* - is not plugged and battery level falls to WARNING boundary
* (becomes <= mLowBatteryWarningLevel).
*/
final boolean sendBatteryLow = !plugged
&& mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
&& mBatteryLevel <= mLowBatteryWarningLevel
&& (oldPlugged || mLastBatteryLevel > mLowBatteryWarningLevel);
sendIntent();
// Separate broadcast is sent for power connected / not connected
// since the standard intent will not wake any applications and some
// applications may want to have smart behavior based on this.
Intent statusIntent = new Intent();
statusIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
if (mPlugType != 0 && mLastPlugType == 0) {
statusIntent.setAction(Intent.ACTION_POWER_CONNECTED);
mContext.sendBroadcast(statusIntent);
}
else if (mPlugType == 0 && mLastPlugType != 0) {
statusIntent.setAction(Intent.ACTION_POWER_DISCONNECTED);
mContext.sendBroadcast(statusIntent);
}
if (sendBatteryLow) {
mSentLowBatteryBroadcast = true;
statusIntent.setAction(Intent.ACTION_BATTERY_LOW);
mContext.sendBroadcast(statusIntent);