В настоящее время я занимаюсь разработкой приложения с использованием qt для планшета, работающего под управлением Ubuntu 14.04.
Поскольку на устройстве только плохой индикатор заряда батареи и приложение будет работать в полноэкранном режиме в течение длительного времени, я хочу показать индикатор заряда батареи внутри приложения. Поиск нашел в основном старые результаты или звонки в windows, android или ios apis.
Есть ли способ использовать только Qt apis или другой удобный способ получить информацию о состоянии батареи?
Даже если в Qt такого API нет, вы можете найти утилиту командной строки (например, upower
), который возвращает информацию о состоянии батареи и выполняет ее из приложения Qt с помощью QProcess
, После того, как утилита закончила работу, вы можете прочитать ее стандартный вывод и проанализировать ее, чтобы найти всю необходимую информацию.
Для инструментов командной строки, связанных с батареей в Ubuntu вы можете обратиться, например, эта страница.
Несмотря на то, что ответ пользователя vahanchos был полезен для меня и, вероятно, является подходом для других, я нашел другое решение.
В моем случае я пишу код только для одного специального типа устройства и известного набора машин для разработки. поэтому я мог бы просто прочитать соответствующие файлы в sys/class/power_supply/
, Я не могу гарантировать, что другие устройства будут называть свои файлы там точно так же. Но, возможно, стоит попробовать.
#include <QFile>
void refreshValues(){
QFile acLine("/sys/class/power_supply/AC/online");
QFile acAdp("/sys/class/power_supply/ADP0/online");
QFile bCap("/sys/class/power_supply/BAT0/capacity");
bool ac = false;
int level = 0;
if(acLine.exists()){
acLine.open(QIODevice::ReadOnly | QIODevice::Text);
if(QString(acLine.readAll()).toInt()){
ac = true;
}
acLine.close();
}else if(acAdp.exists()){
acAdp.open(QIODevice::ReadOnly | QIODevice::Text);
if(QString(acAdp.readAll()).toInt()){
ac = true;
}
acAdp.close();
}
if(bCap.exists()){
bCap.open(QIODevice::ReadOnly | QIODevice::Text);
level = QString(bCap.readAll()).toInt();
bCap.close();
}
setAcPowerActive(ac);
setBatteryLevel(level);
}