我正在尝试从服务获取电池电量。我正在成功获得等级。但是我有一个问题。那就是当我第一次尝试获取电池电量时,我会得到零电量。但是几秒钟后我问时,我会得到准确的水平。我不明白为什么会这样。

这是获取电池电量的代码:

String bLevel;
private String getBatteryLevel(){
        BroadcastReceiver cBReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                int currentScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                int batteryLevel;
                if (currentLevel >= 0 && currentScale > 0) {
                    batteryLevel = (currentLevel * 100) / currentScale;
                    bLevel = Integer.toString(batteryLevel) + " percent";
                }
            }
        };
        IntentFilter cIFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(cBReceiver, cIFilter);
        return bLevel;
    }


请查看代码。我不知道为什么我第一次问电池电量为零。请帮忙

最佳答案

据我所读。您正在线性运行代码,并返回一个未初始化的值

String bLevel;
// stuffs ... stuffs ... stuffs...
return bLevel;


此String为null,则您正在注册接收者。广播该事件后,您就可以更改变量,并且它具有正确的信息。

这打破了OO范式。

08-03 22:40