首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >1小时后我怎样才能得到电池状态?

1小时后我怎样才能得到电池状态?
EN

Stack Overflow用户
提问于 2014-07-22 09:15:11
回答 1查看 62关注 0票数 0

我想要开发一个Android应用程序,它计算电池应用程序,所以我的想法是这样做:当用户启动应用程序时,应用程序获得手机的电池级别(例如: 80%)。1小时后,应用程序再次获得电池状态(例如: 76%)。计算:1小时内电池损失4%,电池寿命约20h (80/4)。

我知道,如何得到电池的状态,等等。我的问题是:如何在后台设置倒计时1小时?显示倒计时的地方不应该有任何textView。倒计时需要在后台进行。我怎么能这么做?

我在googled上搜索并发现了这一点,但这不起作用:(我将这些方法放在onCreate()

代码语言:javascript
复制
CountDownTimer countDownTimer = new CountDownTimer(5000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            IntentFilter intFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
            BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
                }
            };
        }

        @Override
        public void onFinish() {
            BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
                    Toast toast = Toast.makeText(context, "Battery: " + level/4, Toast.LENGTH_LONG); // this is just, to check, if the countDown is still running
                    toast.show();
                }
            };
        }
    };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-22 09:39:16

你需要注册一次你的广播接收器。

代码语言:javascript
复制
       //in Oncreate
       ...
       IntentFilter intFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
       BatteryReceiver batteryReceiver = new BatteryReceiver();
       registerReceiver(batteryReceiver , intFilter);
       ...

       public class BatteryReceiver extends BroadcastReceiver {
            int startlevel = 0;
            long lastUpdateTime = 0;
            boolean isStartCheck = false;
            @Override
            public void onReceive(Context context, Intent intent) {
                if(!isStartCheck){
                    startlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
                    lastUpdateTime = System.currentTimeMillis();
                    isStartCheck = true;   
                } else {
                    if((System.currentTimeMillis() - lastUpdateTime)/1000 > 3600) {
                    // 1h was going. do your work.
                    reset();
                    }
                }  
            }

            public void reset() {
                lastUpdateTime = System.currentTimeMillis();
                isStartCheck = false;
                startLevel = 0;
            }

       }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24883351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档