Как сохранить экран в Qt для Android?

Я нашел пару решений, как сделать это в Java, но не нашел, как я могу сделать это в QML или Qt. Я знаю, что сначала я должен установить WAKE_LOCK разрешение в AndroidManifest.xml, Что я должен сделать, чтобы можно было включать и выключать блокировку экрана из Qt во время выполнения?

4

Решение

Ты можешь использовать 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);
}
}
}
6

Другие решения

  1. использование window.callMethod<void> вместо window.callObjectMethod
  2. Запустите поток GUI с QtAndroid::runOnAndroidThread
  3. Очистить исключения после
  4. Чтобы всегда отключать поведение, используйте 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();
}
});
}
5

Вы можете добиться этого, отредактировав 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.

Постройте проект, он будет работать нормально.

1
По вопросам рекламы [email protected]