Как определить, когда батарея разряжена: Android?
Я хочу закрыть свое приложение, когда уровень заряда устройства снижается.
Я добавил следующие коды в манифест.
<receiver android:name=".BatteryLevelReceiver"
<intent-filter>
<action android:name="android.intent.action.ACTION_BATTERY_LOW" />
<action android:name="android.intent.action.ACTION_BATTERY_OKAY" />
</intent-filter>
</receiver>
И следующий код в приемнике
public class BatteryLevelReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "BAttery dying!!", Toast.LENGTH_LONG).show();
Log.e("", "BATTERY LOW!!");
}
}
Я запускаю приложение на эмуляторе и меняю уровень заряда батареи с помощью telnet.
Он меняет уровень заряда батареи, но не показывает тостов или журналов.
Что мне не хватает?
Любая помощь приветствуется!
Спасибо.
Ответы
Ответ 1
Зарегистрируйте ваш ресивер в коде, а не в файле AndroidManifest.
registerReceiver(batteryChangeReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED)); // register in activity or service
public class BatteryChangeReceiver extends BroadcastReceiver {
int scale = -1;
int level = -1;
int voltage = -1;
int temp = -1;
@Override
public void onReceive(Context context, Intent intent) {
level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
}
}
unregisterReceiver(batteryChangeReceiver);//unregister in the activity or service
Или прослушивайте уровень заряда батареи с нулевым приемником.
Intent BATTERYintent = this.registerReceiver(null, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
int level = BATTERYintent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
Log.v(null, "LEVEL" + level);
Ответ 2
Вы можете зарегистрировать приемник в AndroidManifest.xml
, однако убедитесь, что действие, на которое вы фильтруете,
android.intent.action.BATTERY_LOW
а не
android.intent.action.ACTION_BATTERY_LOW
(который вы использовали в своем коде).
Ответ 3
k3v является правильным.
В документации есть ошибка.
В нем конкретно говорится, что нужно использовать "android.intent.action.ACTION_BATTERY_LOW".
Но правильное действие в манифесте - "android.intent.action.BATTERY_LOW"
См. Здесь: http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
(Не удалось проголосовать, ответить на k3v, не хватать стоп-кадров в стеке)...
ОБНОВЛЕНИЕ: теперь я могу и проголосовал за k3v: -)
Ответ 4
Возможно, эмулятор не отвечает на сообщения BATTERY_LOW
и BATTERY_OKAY
. Попробуйте на реальном Android-устройстве.