Android 2.0. Лучший способ проверить уровень заряда батареи / зарядку?

Хорошо, позвольте мне начать с того, что я много искал ответ на этот вопрос. Я пытаюсь понять, что лучше всего и что лучше всего для автономной работы. Вот моя ситуация:

Я хотел бы, чтобы мое приложение приостанавливало свою деятельность, когда устройство достигает определенного уровня заряда батареи, определенного пользователем, и не должно использовать Intent.ACTION_BATTERY_LOW и Intent.ACTION_BATTERY_OKAY. Я видел эту опцию во многих программах и хотел бы подражать ей в моем приложении.

Я понимаю, что Intent.ACTION_BATTERY_CHANGED должно быть зарегистрированным событием. Вы не можете просто объявить это в манифесте для BroadcastReceiver, чтобы получатель получил намерение. Я знаю, как запрограммировать, как получить уровень / шкалу заряда батареи и посмотреть, заряжается ли устройство через USB или AC

Мой текущий мыслительный процесс привел меня к 2 вариантам, и я не могу определить, какой из них лучший вариант или если есть другой вариант, о котором я не знаю ?? Может быть, кто-нибудь может помочь мне с плюсами и минусами вариантов, чтобы помочь мне ??

Вариант 1: Создайте повторяющийся сигнал тревоги с помощью AlarmManager, чтобы в основном опрашивать устройство время от времени, чтобы проверить уровень заряда батареи. Чтобы при срабатывании моего сигнала тревоги он отправлял настраиваемое намерение для моего зарегистрированного приемника для проверки уровня заряда батареи.
PRO не работает фоновая служба, которая могла бы перестать работать или расходовать заряд батареи.
Минусы: отсутствие обнаружения в реальном времени подключения / отключения устройства от источника зарядки и необходимость полагаться на следующий сработавший сигнал тревоги для обнаружения изменения.

Вариант 2: Создайте службу, которая регистрирует приемник для Intent.ACTION_BATTERY_CHANGED, чтобы он не только получал уровень заряда батареи, когда он транслируется системой, но и обнаруживал изменения в процессе зарядки в реальном времени.
PRO в реальном времени обнаружение изменения срока службы батареи и изменений метода зарядки.
CON - постоянная работа службы, которая может быть остановлена.
CON потреблял бы время обработки и срок службы батареи, чтобы продолжить обнаружение.



Уровень заряда батареи:

Получите уровень заряда батареи до того, как широковещательный приемник ответит на намерение. ACTION_BATTERY_CHANGED

Intent batteryIntent = context.getApplicationContext().registerReceiver(null,
                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
int rawlevel = batteryIntent.getIntExtra("level", -1);
double scale = batteryIntent.getIntExtra("scale", -1);
double level = -1;
if (rawlevel >= 0 && scale > 0) {
    level = rawlevel / scale;



Подключение к сети / зарядка:

Android-соединение USB, сигналы зарядки

public static boolean isConnected(Context context) {
    Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
    return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB;
}

}


Заранее спасибо
-H

5
задан Community 23 May 2017 в 10:26
поделиться