大家好我正在开发一个应用程序,我正在获得电池级别并在textview中显示它。现在我想在每5秒后将此等级提高1%,并希望显示此增量。 我试过以下代码,但我无法获得输出
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秒后电池电量不会增加。我做错了什么?
答案 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