QAndroidApplication Struct

struct QNativeInterface::QAndroidApplication

Native Schnittstelle zu einer Kernanwendung auf Android. Mehr...

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

Statische öffentliche Mitglieder

(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()

Detaillierte Beschreibung

Zu erreichen über QCoreApplication::nativeInterface().

Dokumentation der Memberfunktionen

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

Gibt den Android-Kontext als QJniObject zurück. Der Kontext ist ein Activity, wenn das zuletzt gestartete Aktivitätsobjekt gültig ist. Andernfalls ist der Kontext ein Service.

Diese Funktion wurde in Qt 6.2 eingeführt.

[static, since 6.2] void QAndroidApplication::hideSplashScreen(int duration = 0)

Blendet den Splash-Screen mit einem Fade-Effekt für die angegebene duration aus. Wenn duration nicht angegeben wird (Standard ist 0), wird der Startbildschirm sofort nach dem Start der Anwendung ausgeblendet.

Diese Funktion wurde in Qt 6.2 eingeführt.

[static, since 6.2] bool QAndroidApplication::isActivityContext()

Gibt true zurück, wenn QAndroidApplication::context() einen Activity Kontext liefert.

Diese Funktion wurde in Qt 6.2 eingeführt.

[static, since 6.2] QFuture<QVariant> QAndroidApplication::runOnAndroidMainThread(const std::function<QVariant ()> &runnable, const QDeadlineTimer timeout = QDeadlineTimer::Forever)

Sendet die Funktion runnable an den Android-Thread. Die Funktion wird in eine Warteschlange gestellt und auf dem Android UI-Thread ausgeführt. Wenn der Aufruf auf dem Android UI-Thread erfolgt, wird runnable sofort ausgeführt. Wenn die Android-App pausiert oder die Hauptaktivität null ist, wird runnable zur Warteschlange des Android-Hauptthreads hinzugefügt.

Dieser Aufruf gibt ein QFuture<QVariant> zurück, das sowohl synchrone als auch asynchrone Aufrufe ermöglicht und jeden Rückgabetyp verarbeiten kann. Um jedoch ein Ergebnis von QFuture::result() zurückzubekommen, sollte QVariant::value() verwendet werden.

Wenn die Ausführung von runnable länger dauert als die Dauer von timeout, werden die blockierenden Aufrufe QFuture::waitForFinished() und QFuture::result() beendet, sobald timeout abgelaufen ist. Wenn runnable jedoch bereits mit der Ausführung begonnen hat, wird sie nicht abgebrochen.

Das folgende Beispiel zeigt, wie man einen asynchronen Aufruf ausführt, der einen Rückgabetyp erwartet:

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";
});

Das folgende Beispiel zeigt, wie man einen synchronen Aufruf mit einem Rückgabetyp void ausführt:

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();

Hinweis: Achten Sie auf die Art der Operationen, die Sie auf dem Android-Haupt-Thread ausführen, da jede lange Operation das UI-Rendering und die Eingabeverarbeitung der App blockieren kann. Wenn erwartet wird, dass die Funktion eine lange Ausführungszeit hat, ist es auch gut, ein QDeadlineTimer in Ihrem runnable zu verwenden, um die Ausführung zu verwalten und sicherzustellen, dass es den UI-Thread nicht blockiert. Normalerweise kann jeder Vorgang, der länger als 5 Sekunden dauert, die Benutzeroberfläche der Anwendung blockieren. Weitere Informationen finden Sie unter Reaktionsfähigkeit Ihrer App.

Diese Funktion wurde in Qt 6.2 eingeführt.

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

Gibt die Android SDK-Version zurück. Dies ist auch als API-Level bekannt.

Diese Funktion wurde in Qt 6.2 eingeführt.

© 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.