A smartphone (assume Android) usually displays the battery percentage from 0 to 100%. I am assuming this is the usable power capacity of the battery. I have several questions:
1) How exactly does it measure the remaining power? Assuming a battery is rated to be 3.2V, it might be providing 3.3 V when fully charged and the minimum required voltage of the phone might be 3V. Does the 0-100% refer to 3V to 3.3V? Is this calibration made only once during the time of manufacture?
2) How is the remaining power % measured so accurately? Are the measurements averaged over a period? If so, what is the sampling frequency and how many reading are averaged to get the final?
3) How is the remaining power % measured when the phone is charging? I guess the output voltage might be different when it is charging.
4) How is calibration of battery power affected by ambient temperature? I am aware that batteries nowadays have temperature sensors. Is the temperature used to calculate the battery power remaining or the optimum charging rate?
5) Assuming battery consumption is not linear as the battery discharge… (intensive games, etc). How does the smartphone handle variable discharge rates? There are apps to re-calibrate batteries. How do they work?
6) How does the OS determine battery usage of each app? Is it just based on CPU cycles and screen time or is there some actual measurement of power dissipation?
My apologies if these are too many questions. I but I believe they are all related.
As mentioned in the comments, it uses fuel gauge. There are several algorithms for Li-Ion chemistry, and the gauge might use one or more of them.
The most basic one is the Columb counter. The fuel gauge has a current shunt with an amplifier and measures the consumed current, sums it over time and compares it to the programmed battery capacity.
An addition to the Columb counter is impedance tracking, in which the fuel gauge tries to measure the battery's impedance. A lithium ion cell has a specific impedance for each state of charge, so an estimate can be made regarding the amount of charge left.
The fuel gauge usually has its own temperature sensor to compensate for various temperature related effects.
It reports its status via I2C (SMbus in some cases) to the main processor.