1

我是 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 函数对其进行测试时,它返回正确的值。

请有人这么好心地告诉我我做错了什么或我没有做什么,并可能为我提供一个代码片段,因为我是开发新手。如果我的帖子不正确,请原谅 Stack Overflow 上的第一个计时器: )

非常感谢!

4

1 回答 1

1

这不是一个线程。这是一个 Runnable,它是一段在线程中运行的代码。

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

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

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

编辑

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

您在不知道它是否确实被修改的情况下编写了 batteryLevel 值

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

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

于 2012-09-03T09:42:53.483 回答