Структура QAndroidApplication
структура QNativeInterface::QAndroidApplicationНативный интерфейс для основного приложения на Android. Подробнее...
| Заголовок: | #include <QCoreApplication> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 6.2 |
Статические публичные члены
| int | context() |
| void | hideSplashScreen(int duration = 0) |
| bool | isActivityContext() |
| QFuture<QVariant> | runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever) |
| int | sdkVersion() |
Подробное описание
Доступ через QCoreApplication::nativeInterface().
Документация функций-членов
[static, since 6.2] int QAndroidApplication::context()
Возвращает контекст Android в виде jobject. Контекст является Activity, если объект основного Activity действителен. В противном случае, контекст является Service.
Эта функция была добавлена в Qt 6.2.
[static, since 6.2] void QAndroidApplication::hideSplashScreen(int duration = 0)
Скрывает экран загрузки с помощью эффекта затемнения на заданное время duration. Если duration не указан (по умолчанию 0), экран загрузки скрывается сразу после запуска приложения.
Эта функция была добавлена в Qt 6.2.
[static, since 6.2] bool QAndroidApplication::isActivityContext()
Возвращает true, если QAndroidApplication::context() предоставляет контекст Activity.
Эта функция была добавлена в Qt 6.2.
[static, since 6.2] QFuture<QVariant> QAndroidApplication::runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)
Отправляет функцию runnable в поток Android. Функция будет помещена в очередь и выполнена в потоке пользовательского интерфейса Android. Если вызов производится в потоке пользовательского интерфейса Android, runnable будет выполнена немедленно. Если приложение Android приостановлено или основной Activity равен null, runnable добавляется в очередь потока пользовательского интерфейса Android.
Этот вызов возвращает QFuture<QVariant>, что позволяет выполнять как синхронные, так и асинхронные вызовы и обрабатывать любой тип возвращаемого значения. Однако для получения результата из QFuture::result() следует использовать QVariant::value().
Если выполнение runnable занимает больше времени, чем период timeout, блокирующие вызовы QFuture::waitForFinished() и QFuture::result() завершатся по истечении timeout. Однако, если runnable уже начала выполнение, она не будет отменена.
Следующий пример демонстрирует как выполнить асинхронный вызов, ожидающий возвращаемое значение:
auto task = QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() {
QJniObject surfaceView;
if (!surfaceView.isValid())
qDebug() << "SurfaceView object is not valid yet";
surfaceView = QJniObject("android/view/SurfaceView",
"(Landroid/content/Context;)V",
QNativeInterface::QAndroidApplication::context());
return QVariant::fromValue(surfaceView);
}).then([](QFuture<QVariant> future) {
auto surfaceView = future.result().value<QJniObject>();
if (surfaceView.isValid())
qDebug() << "Retrieved SurfaceView object is valid";
}); Следующий пример демонстрирует как выполнить синхронный вызов с возвращаемым значением void:
QNativeInterface::QAndroidApplication::runOnAndroidMainThread([]() {
QJniObject activity = QNativeInterface::QAndroidApplication::context();
// Hide system ui elements or go full screen
activity.callObjectMethod("getWindow", "()Landroid/view/Window;")
.callObjectMethod("getDecorView", "()Landroid/view/View;")
.callMethod<void>("setSystemUiVisibility", "(I)V", 0xffffffff);
}).waitForFinished(); Примечание: Будьте внимательны к типам операций, выполняемых в основном потоке Android, так как любая длительная операция может заблокировать отрисовку пользовательского интерфейса и обработку ввода приложения. Если функция должна выполняться длительное время, также рекомендуется использовать QDeadlineTimer в вашем runnable для управления выполнением и предотвращения блокирования потока пользовательского интерфейса. Обычно любая операция, длящейся более 5 секунд, может заблокировать пользовательский интерфейс приложения. Дополнительную информацию см. в Поддерживание отзывчивости приложения.
Эта функция была добавлена в Qt 6.2.
[static, since 6.2] int QAndroidApplication::sdkVersion()
Возвращает версию SDK Android. Также известна как уровень API.
Эта функция была добавлена в Qt 6.2.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qnativeinterface-qandroidapplication.html