Я нашел пару решений, как сделать это в Java, но не нашел, как я могу сделать это в QML или Qt. Я знаю, что сначала я должен установить WAKE_LOCK
разрешение в AndroidManifest.xml
, Что я должен сделать, чтобы можно было включать и выключать блокировку экрана из Qt во время выполнения?
Ты можешь использовать Qt Android Extras модуль и использовать JNI для вызова соответствующей функции Java из C ++. Что-то вроде :
void keepScreenOn()
{
QAndroidJniObject activity = QtAndroid::androidActivity();
if (activity.isValid()) {
QAndroidJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
if (window.isValid()) {
const int FLAG_KEEP_SCREEN_ON = 128;
window.callObjectMethod("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
}
}
window.callMethod<void>
вместо window.callObjectMethod
QtAndroid::runOnAndroidThread
clearFlags
Это проверенный код Qt 5.7:
void keep_screen_on(bool on) {
QtAndroid::runOnAndroidThread([on]{
QAndroidJniObject activity = QtAndroid::androidActivity();
if (activity.isValid()) {
QAndroidJniObject window =
activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
if (window.isValid()) {
const int FLAG_KEEP_SCREEN_ON = 128;
if (on) {
window.callMethod<void>("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
} else {
window.callMethod<void>("clearFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
}
}
QAndroidJniEnvironment env;
if (env->ExceptionCheck()) {
env->ExceptionClear();
}
});
}
Вы можете добиться этого, отредактировав java-файл, используемый самой qt. В пути установки под src в пути Android вы найдете файл QtActivity.java. В функцию onCreate добавьте строку ниже
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Также необходимо добавить разрешение WAKE_LOCK в AndroidManifest.xml.
Постройте проект, он будет работать нормально.