我想编写一个应用程序(用于研究),每次电池电量变化时都会生成一个时间戳。如果我不能这样做,我想做到这一点,每10分钟左右需要一次电池读数。
我有这个BroadcastReceiver
代码,但我不知道该把它放在哪里。
我的应用程序因以下异常而崩溃:
java.lang.RuntimeException:在com.mdog.datareceive.Receive$1@43c9cd10
中接收广播Intent {act = android.intent.action.BATTERY_CHANGED flg = 0x60000000(有额外内容)}时出错
在我的活动的onCreate
中,我产生了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);
答案 0 :(得分:0)
我想你想看一下使用AlarmManager。您可以在手机启动时设置闹钟,并在收到该闹钟后,您可以检查电池并在将来10分钟内设置另一个闹钟。
使用AlarmManager比你自己的线程更好,因为