将电池电量状态存储在txt文件中

时间:2012-09-03 09:39:09

标签: android

我是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:)

非常感谢!

1 个答案:

答案 0 :(得分:1)

这不是一个主题。这是一个Runnable,它是一段代码,可以在Thread中运行。

在您的情况下,它在处理程序线程中运行,很可能是UI线程。

您可能在收到电池状态之前启动线程,因此将默认值(0)写入文件。

你不需要一个线程。您可以在接收广播后立即在onReceive方法中写入文件。

修改

在您的代码中有一些不起作用的东西。您取消注册广播接收器,因此您第一次没有收到电池电量。

您可以在不知道是否确实已修改的情况下编写batteryLevel值

你每2秒写一次,却不知道发生了变化。

我建议您不要取消注册BR,这样您就可以获得所有电池电量变化。然后,在onReceive中,您将日期和新值附加到文件。