ACTION_BATTERY_CHANGED intent in service

android

Solution

Better way to get change value you should use `BroadcastReceiver`.

To get changed value when battery change. You need to use `BroadCastReceiver`.

IntentFilter batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
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);
        float battPct = level/(float)scale;       
    }
};

Problem

I am using this code to track battery information in my service: ``` Intent i = new ContextWrapper(applicationContext).registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); // now you can get the level and scale from this intent variable int level = i.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = i.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float battPct = level/(float)scale; ``` 1.I want to know if it will change automatically then battery is changed? Or do I need to fire that intent by myself periodically? 2. Also I would like to know if there is a way to calculate how much time elapsed since 1% of remaining battery has been used.

Original source