Срок службы батареи Android Broadcast Receiver каждые 10 минут или изменение, может ли он идти в своем собственном потоке? - PullRequest
0 голосов
/ 31 марта 2011

Я хотел бы написать приложение (для исследований), которое делает отметку времени каждый раз, когда уровень заряда батареи изменяется.Если я не могу этого сделать, я хочу сделать так, чтобы показания батареи каждые 10 минут или около того.

У меня есть этот BroadcastReceiver код, но я не уверен, куда его поместить.

Мое приложение продолжает аварийно завершать работу со следующим исключением:

java.lang.RuntimeException: Ошибка при приеме широковещательного Намеренияиз моей деятельности я создал 3 потока AsyncTask, которые делают вещи в фоновом режиме.Где бы было хорошее место для размещения вещательного приемника?

Я пробовал в onCreate и пробовал новый метод, который вызывается одной из фоновых задач.Я думаю, что проблема может быть в том, что функция, в которой находится код BroadcastRecevier, может преждевременно заканчиваться?

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

Код:

batteryLevelTimeStamps = new LinkedList<String>();
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent){
        int rawlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        int level = -1;
        if (rawlevel >= 0 && scale > 0) {
            level = (rawlevel * 100) / scale;
        }

        batteryLevel = level + "%";
        batteryLevelTimeStamps.add("At time: " + new Date().toString() + " the battery level is:" +batteryLevel); 
        out.print("At time: " + new Date().toString() + " the battery level is:" +batteryLevel + " in onCreate\n");
    }
};

IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);

1 Ответ

0 голосов
/ 31 марта 2011

Я думаю, что вы хотите посмотреть на использование AlarmManager. Вы можете установить будильник при загрузке телефона, а после получения этого сигнала вы можете проверить аккумулятор и установить еще один будильник через 10 минут.

Использование AlarmManager лучше, чем ваш собственный поток, потому что

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