Android:当电池处于定义的水平时执行某些操作

2023-12-28

我在这里遇到了一个小问题。

我希望我的应用程序执行某些操作,但仅限于电池电量为 10% 时。

我的应用程序不会持续监视电池电量;它只是等待 LOW_BATTERY 意图。

如果我不指定级别,它会起作用,但它会起作用 3 次:15%、10% 和 5%

我只希望它以 10% 的速度做某事。

这是我的代码:

public void onReceive(Context context, Intent intent) 
{
    if(intent.getAction().equals(ACTION_BATTERY_LOW))
    {
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
        int percent = (level*100)/scale; 

        if(percent == 10)
        {
            // Do Something

        }
    }
}

ACTION_BATTERY_LOW没有您要从中读取的附加内容,因此您会得到percent as -1每次。

正如@bimal 暗示的那样,那些额外的东西are附于ACTION_BATTERY_CHANGED播送。但这并不意味着您只需注册即可接收该信息。ACTION_BATTERY_CHANGED是粘性的,所以registerReceiver()立即返回最后一个 Intent。这意味着您可以执行以下操作:

public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals(ACTION_BATTERY_LOW)) {
        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus = context.registerReceiver(null, ifilter);

        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
        int percent = (level*100)/scale; 

        if (percent <= 10 && percent > 5) {
            // Do Something
        }
    }
}

注意registerReciever()被称为nullBroadcastReceiver,这样你就不用担心注销的问题了。这是一种很好、干净的方式来表达“现在电池状态如何?” (嗯,从技术上来说,这就是was上次发送广播时。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:当电池处于定义的水平时执行某些操作 的相关文章

随机推荐