Я нашел пару решений, как это сделать на Java, но не нашел, как это сделать в QML или Qt. Я знаю, что сначала я должен установить разрешение WAKE_LOCK
в AndroidManifest.xml
. Что я должен сделать, чтобы включить и выключить блокировку экрана из Qt во время выполнения?Как сохранить экран в Qt для Android?
3
A
ответ
6
Вы можете использовать модуль the 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);
}
}
}
1
Это можно сделать, отредактировав файл 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.
Постройте проект, он будет работать нормально.
4
- Использование
window.callMethod<void>
вместоwindow.callObjectMethod
- Запуск на GUI потоке с
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();
}
});
}
Смежные вопросы
- 1. Android Как сохранить экран при использовании webView
- 2. Прозрачный экран Splashscreen Qt
- 3. Пустой экран при развертывании приложения Qt QML для Android
- 4. Как сохранить настройки в Qt
- 5. Разделите экран приложения в Qt
- 6. Как настроить экран загрузки в Qt?
- 7. QT Multimedia, черный экран для фильма H264
- 8. Как сохранить экран поиска активным?
- 9. Экран экземпляра Android для Android
- 10. Сохранить QImage в Qt
- 11. Как прокрутить экран в приложении для Android?
- 12. Как сохранить экран с помощью веб-страницы
- 13. Как создать экран «Сохранить как» в WPF?
- 14. Как сохранить мобильный экран на
- 15. Сохранить экран печати в C#
- 16. qt - создатель - как увеличить экран виджета
- 17. Как сохранить полный экран при щелчке на twinner android?
- 18. Сохранить записанный экран телефона
- 19. Экран Qt и high dpi
- 20. Как отправить SMS в Qt для Android?
- 21. Как просыпаться экран в android
- 22. Желание сохранить экран в приложении Delphi на Android
- 23. QT/QML Android: Как сохранить приложение при закрытии последних окон?
- 24. Как сохранить экран в приложении универсального телефона?
- 25. Как сохранить зашифрованные настройки в Qt/C++?
- 26. Как создать экран в Android?
- 27. Как обновить экран в Android?
- 28. Как сохранить изменения в приложении Qt?
- 29. Как рассчитать экран Android?
- 30. Как включить разделенный экран в приложении для Android Android
Это именно то, что я искал! –
Если я вызываю его в main(), он работает так, как ожидалось, но если я его вызываю в слот, он не работает и бросает какое-то исключение Java. Является ли цикл события QGuiApplication перемещенным в другой поток после вызова exec(). –
№ 'QGuiApplication' останется в главном потоке приложения. Может быть, лучше спросить об этом в новом новом вопросе и описать вашу проблему. – Nejat