Android 2.0 Лучший способ проверить уровень заряда батареи / зарядки? - PullRequest
5 голосов
/ 24 января 2012

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

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

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

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

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

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



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

Получить уровень заряда батареи до того, как широковещательный приемник ответит на Intent.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;



подключен / зарядка:

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

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

1 Ответ

6 голосов
/ 28 января 2012

Вот решение, которое я придумала

Я создал Alarm для отключения X количество секунд, я думаю, я установил его на 90, чтобы отправить пользовательский Intent.Затем я обнаружил, что android.intent.action.ACTION_POWER_CONNECTED и android.intent.action.ACTION_POWER_DISCONNECTED позволяют мне проверить, подключено ли устройство или нет.Используя комбинацию вышеупомянутых функций, я смог проверить уровень заряда батареи и зарядку устройства без необходимости постоянного обслуживания с зарегистрированным получателем.Я надеюсь, что это поможет хоть кому-то там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...