我是Android的新手。我已经能够使用以下代码获得电池状态/级别:
private void BattStatus() {
BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
context.unregisterReceiver(this);
int rawlevel = intent.getIntExtra("level", -1);
int scale = intent.getIntExtra("scale", -1);
int level = -1;
if (rawlevel >= 0 && scale > 0) {
level = (rawlevel * 100) / scale;
}
batteryLevel = level;
BattStatus.setText("Battery Level : " + batteryLevel + "%");
}
};
IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(batteryLevelReceiver, batteryLevelFilter);
}
我想将电池电量存储在文本文件中(使用线程)。代码:
public final Runnable DBThread = new Runnable() {
String AllInfo = batteryLevel+"%"+" , "+new SimpleDateFormat("HH:mm , dd.MM.yy ").format(new Date());
public void run() {
try {
Log.d("DBThread","Battery :"+batteryLevel);
Log.d("DBThread","Updating DB");
myDbHelper.CreateAndWriteFile(sdDir+"/", AllInfo );
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.postAtTime(this, SystemClock.uptimeMillis() + 2000);
Log.d("DBThread","Updated DB");
Log.d("DBThread",AllInfo);
}
不幸的是,电池状态/级别在文本文件中返回0%,当我使用线程中的Log函数测试它时,它返回正确的值。
请有人可以这么好地告诉我我做错了什么或我做了什么,并且可能会给我提供一个代码片段,因为我不熟悉Development.And抱歉如果我的帖子不正确Stack Overflow:)
非常感谢!
答案 0 :(得分:1)
这不是一个主题。这是一个Runnable,它是一段代码,可以在Thread中运行。
在您的情况下,它在处理程序线程中运行,很可能是UI线程。
您可能在收到电池状态之前启动线程,因此将默认值(0)写入文件。
你不需要一个线程。您可以在接收广播后立即在onReceive方法中写入文件。
在您的代码中有一些不起作用的东西。您取消注册广播接收器,因此您第一次没有收到电池电量。
您可以在不知道是否确实已修改的情况下编写batteryLevel值
你每2秒写一次,却不知道发生了变化。
我建议您不要取消注册BR,这样您就可以获得所有电池电量变化。然后,在onReceive中,您将日期和新值附加到文件。