Android如何在文本视图中增加电池电量

时间:2015-01-05 16:57:23

标签: android

大家好我正在开发一个应用程序,我正在获得电池级别并在textview中显示它。现在我想在每5秒后将此等级提高1%,并希望显示此增量。 我试过以下代码,但我无法获得输出

java代码

public class ChargingActivity extends Activity {
    TextView textBatteryLevel = null;
    int level;

    private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context ctxt, Intent intent) {
            level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                public void run() {
                    // add your stuff here
                    level++;
                }
            }  
         , 5000);
            textBatteryLevel.setText(String.valueOf(level) + "%");
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chargingactivity);
        textBatteryLevel = (TextView) findViewById(R.id.btrylevel);
        this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

但每5秒后电池电量不会增加。我做错了什么?

2 个答案:

答案 0 :(得分:0)

在TimerTask中移动文本更改代码。

Timer timer = new Timer();
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context ctxt, Intent intent) {
            level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            timer.schedule(new TimerTask() {
                public void run() {
                    level++;
                     textBatteryLevel.setText(String.valueOf(level) + "%");
                    }
                }
            , 5000);
        }
      };

答案 1 :(得分:0)

我建议使用postDelayed(...)类的View方法,也不要使用实际的BroadcastReceiver

例如,Intent.ACTION_BATTERY_CHANGED STICKY 广播,因此不需要BroadcastReceiver来处理它。相反,如果我们将null作为第一个参数传递给registerReceiver(...)方法,则实际上没有注册接收者,但该调用的返回是来自粘性广播的Intent。实施例...

Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

下一步是为TextView设置5秒更新。 Android View类具有postDelayed(...)方法,该方法接受Runnable参数以及延迟(以毫秒为单位)。实施例...

textBatteryLevel.postDelayed(levelChecker, 5000);

postDelayed(...) View方法是一次性(非重复)'帖子',因此请确保在run()的{​​{1}}方法中重置每次被召唤。

我没有测试过以下代码,但我认为它应该可行。但请记住,无法保证电池电量在任何5秒钟内都会发生变化。在我的手机上为平板电脑和类似设备充电可能每1%花费大约1分钟,所以我当然不希望每隔5秒看到Runnable的更新。

TextView