Я хотел бы написать приложение (для исследований), которое делает отметку времени каждый раз, когда уровень заряда батареи изменяется.Если я не могу этого сделать, я хочу сделать так, чтобы показания батареи каждые 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);