Как получить события жизненного цикла мобильного приложения в QtApp

Я программирую приложение в коммерческой лицензии Qt 5.9.4. Мое приложение работает на Android и iOS.

Вопрос:
Есть ли способ в Qt обнаруживать обычные события на мобильных устройствах, такие как:
- Дисплей устройства выключен
- Устройство перешло в фоновый режим после того, как пользователь нажал кнопку "Домой" на iOS / Android
- кнопка возврата нажата на Android и т. д.

Есть куча таких событий, которые запускают каждая из платформ Android и iOS.

Если в Qt есть класс / модуль, который ретранслирует эти события, тогда мне не пришлось бы выполнять дополнительную работу по написанию нативных (java и Objective -C) классов, чтобы получить эти события внутри моего QtApp.

1 ответ

Решение

Большинство этих событий обрабатываются самим Qt, и вы можете получить их с помощью классических средств. Qt старается как можно лучше скрыть специфичные для Android вещи и доставляет эти события и т. Д. Так, как вы это делаете в настольном приложении.

Нажатие кнопки "назад" вызывает QCloseEvent это отправляется в главное окно. Вы можете установить фильтр событий на объекте из C++, чтобы перехватить его. Для qml это сигнал Window:: closed.

Поскольку Qt не поддерживает фоновое выполнение действий, фоновая печать, вероятно, также сообщается как закрытое событие - или она выходит из приложения напрямую.

Для переключателя DIsplay я сейчас точно не знаю, но, возможно, сигнал QGuiApplication::applicationStateChanged действительно сообщает об этом как Qt::ApplicationSuspended или другое из этих состояний - просто попробуйте! (это может относиться и к другим событиям)


Краткий совет для Android: Если вы хотите что-то, что Qt не обрабатывает, вы всегда можете просто создать пользовательское действие Java, которое расширяет QtActivity и использовать его в манифесте. Оттуда вы можете использовать JNI для взаимодействия с Java из C++ и наоборот. Если вам нужно сделать это, взгляните на Qt Android Extras - они значительно упрощают использование JNI и предоставляют кучу хороших классов-обёрток и служебных методов в QtAndroid Пространство имен, которое может пригодиться.

Другие вопросы по тегам