QAndroidApplication 结构体
struct QNativeInterface::QAndroidApplicationAndroid 原生界面到核心应用。更多...
头文件 | #include <QCoreApplication> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
自 | Qt 6.2 |
- 全部成员列表,包括继承成员
- QAndroidApplication 是 原生界面 的一部分。
静态公共成员
(自 6.2) QJniObject | context() |
(自 6.2) void | hideSplashScreen(int duration = 0) |
(自 6.2) bool | isActivityContext() |
(自 6.2) QFuture<QVariant> | runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever) |
(自 6.2) int | sdkVersion() |
成员函数文档
[静态, 自 6.2]
QJniObject QAndroidApplication::context()
返回 Android 上下文作为 QJniObject
。如果是最近启动的活动对象有效,上下文是一个 Activity
。否则,上下文是一个 Service
。
此函数自 Qt 6.2 起引入。
[静态, 自 6.2]
void QAndroidApplication::hideSplashScreen(int duration = 0)
通过给定 duration 的淡入淡出效果隐藏启动画面。如果没有提供 duration(默认为 0),则在应用启动后立即隐藏启动画面。
此函数自 Qt 6.2 起引入。
[静态, 自 6.2]
bool QAndroidApplication::isActivityContext()
如果 QAndroidApplication::context() 提供了一个 Activity
上下文,则返回 true
。
此函数自 Qt 6.2 起引入。
[静态,自 6.2 版起]
QFuture<QVariant> QAndroidApplication::runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)
将函数 runnable 投递到 Android 线程。该函数将被排队并在 Android UI 线程上执行。如果在 Android UI 线程上调用,runnable 将立即执行。如果 Android 应用已暂停或主 Activity 为空,runnable
将被添加到 Android 主线程队列。
此调用返回一个 QFuture<QVariant>,允许进行同步和异步调用,并可以处理任何返回类型。但是,要从 QFuture::result() 获取结果,应使用 QVariant::value()。
如果 runnable 执行时间超过 timeout 的时间段,当 timeout 到来时,阻塞调用 QFuture::waitForFinished() 和 QFuture::result() 将结束。但是,如果 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 主线程上进行的操作的类型要小心,任何长时间运行的操作都可能阻塞应用的 UI 渲染和输入处理。如果函数预期执行时间较长,在 runnable 中也使用一个 QDeadlineTimer 来管理执行并确保它不会阻塞 UI 线程也是一个好办法。通常,任何超过 5 秒的操作可能会阻塞应用的 UI。有关更多信息,请参阅保持您的应用响应用户操作。
此函数自 Qt 6.2 起引入。
[静态,自 6.2 版起]
int QAndroidApplication::sdkVersion()
返回 Android SDK 版本。这也称为 API 级别。
此函数自 Qt 6.2 起引入。
© 2024 The Qt Company Ltd. 本文档中的贡献是各自所有者的版权。本提供的文档是在自由软件基金会(Free Software Foundation)发布的 GNU 自由文档许可协议版本 1.3 的条款下许可的。Qt 及其相应标志是 The Qt Company Ltd. 在芬兰和其他国家的商标。所有其他商标均为各自所有者的财产。