ACTION_BATTERY_CHANGED does not update EXTRA_STATUS of device

295 Views Asked by At

I am using ACTION_BATTERY_CHANGED intent-filter to receive broadcast messages from android.

I am using following code

 IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
 Intent batteryStatus = registerReceiver(batteryLevelReceiver, batteryLevelFilter);
 BroadcastReceiver batteryLevelReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent){
        int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
        Log.e(TAG,String.valueOf(status));
        Toast.makeText(MainActivity.this, String.valueOf(status), Toast.LENGTH_SHORT).show();
        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                status == BatteryManager.BATTERY_STATUS_FULL;
        float battPct = (level/(float)scale) * 100;
        txtBatteryPercentage.setText(String.valueOf(battPct));
        txtBatteryStatus.setText(String.valueOf(isCharging));
        if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
        }else {
            mediaPlayer.seekTo(0);
            mediaPlayer.start();
        }
    }
};

Here i m checking the battery charging status as described in android official documentation.

When i ran the application in charging mode, it gives me EXTRA_STATUS values as 2 i.e BATTERY_STATUS_CHARGING which is expected. But when disconnect the charger from device and get another broadcast from android, It still send me same status as if charging. It was expected to be send me the status BATTERY_STATUS_NOT_CHARGING.

Why it does not update the status while sending updated broadcast ?

0

There are 0 best solutions below