I have a java file (QtBattery.java)
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
public class QtBattery {
public double getBatteryPercentage(Context context) {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
if (batteryStatus != null) {
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
if (level != -1 && scale != -1) {
return ((level * 100.0)/ scale);
}
}
return -1.0; // Return -1.0f if battery status cannot be retrieved
}
}
A c++ method in a QWidget class that periodically is called to check the Android battery status.
#ifdef ANDROID
jdouble QtTest4::batteryStatus()
{
jdouble batteryLevel=-1.0;
QJniObject activity = QNativeInterface::QAndroidApplication::context();
if (activity.isValid())
{
QJniObject context = activity.callObjectMethod("getApplicationContext", "()Landroid/content/Context;");
if (context.isValid())
{
batteryLevel = context.callMethod<jdouble>("com/home/QtTest4/QtBattery", "getBatteryPercentage");
}
}
return batteryLevel;
}
#endif
The AndroidManifest.xml includes:
<uses-permission android:name="android.permission.BATTERY_STATS"/>
The problem is the batteryLevel variable is always returned as zero (0.0).
I am looking for suggestions or ideas has to what is wrong.
Thanks.