QNativeInterface::QAndroidApplication Struct

Android 核心应用程序的本地接口。更多

头文件: #include <QCoreApplication>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Qt 6.2

静态公共成员

(since 6.2) QJniObject context()
(since 6.2) void hideSplashScreen(int duration = 0)
(since 6.2) bool isActivityContext()
(since 6.2) QFuture<QVariant> runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)
(since 6.2) int sdkVersion()

详细说明

通过 QCoreApplication::nativeInterface() 访问。

成员函数文档

[static, since 6.2] QJniObject QAndroidApplication::context()

QJniObject 的形式返回 Android 上下文。如果最近启动的活动对象有效,则上下文为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()

如果QAndroidApplication::context() 提供了Activity 上下文,则返回true

此函数在 Qt 6.2 中引入。

[static, since 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 已经开始执行,则不会被取消。

下面的示例展示了如何运行一个期望返回类型的异步调用:

autotask= QNativeInterface::QAndroidApplication::runOnAndroidMainThread([=]() { QJniObjectsurfaceView;if(!surfaceView.isValid())        qDebug() << "SurfaceView object is not valid yet";

    surfaceView=QJniObject("android/view/SurfaceView", "(Landroid/content/Context;)V", QNativeInterface::QAndroidApplication::context());returnQVariant::fromValue(surfaceView);}).then([](QFuture<QVariant>future) {autosurfaceView=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 秒的操作都可能阻塞应用程序的用户界面。如需了解更多信息,请参阅保持应用程序的响应性

此函数在 Qt 6.2 中引入。

[static, since 6.2] int QAndroidApplication::sdkVersion()

返回 Android SDK 版本。这也被称为 API 级别。

此函数在 Qt 6.2 中引入。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.