Android - 第一次询问

时间:2016-03-30 11:33:16

标签: java android intentfilter batterylevel android-broadcastreceiver

我正试图从服务中获取电池电量。我成功了。但我有一个问题。这是当我第一次尝试获得电池电量时,我 null 但是当我在几秒钟之后询问时,我会得到确切的等级。我不明白为什么会发生这种情况。

以下是获取电池电量的代码: -

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;
    }

请参阅代码。我不知道为什么当我第一次要求时,为什么我将 null 作为我的电池电量。请帮忙

1 个答案:

答案 0 :(得分:0)

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

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

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

这打破了OO范式。