Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
androidconnectivitymanager.cpp
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <QtCore/qcoreapplication.h>
7#include <QtCore/qjnienvironment.h>
8
10
11using namespace QNativeInterface;
12
14{
16 std::unique_ptr<AndroidConnectivityManager> connManager = nullptr;
17};
18Q_GLOBAL_STATIC(AndroidConnectivityManagerInstance, androidConnManagerInstance)
19
20static const char networkInformationClass[] =
21 "org/qtproject/qt/android/networkinformation/QtAndroidNetworkInformation";
22
23static void networkConnectivityChanged(JNIEnv *env, jobject obj, jint enumValue)
24{
25 Q_UNUSED(env);
27 const auto connectivity =
29 Q_EMIT androidConnManagerInstance->connManager->connectivityChanged(connectivity);
30}
31Q_DECLARE_JNI_NATIVE_METHOD(networkConnectivityChanged)
32
33static void genericInfoChanged(JNIEnv *env, jobject obj, jboolean captivePortal, jboolean metered)
34{
35 Q_UNUSED(env);
37 Q_EMIT androidConnManagerInstance->connManager->captivePortalChanged(captivePortal);
38 Q_EMIT androidConnManagerInstance->connManager->meteredChanged(metered);
39}
40Q_DECLARE_JNI_NATIVE_METHOD(genericInfoChanged)
41
42static void transportMediumChanged(JNIEnv *env, jobject obj, jint enumValue)
43{
44 Q_UNUSED(env);
46 const auto transport = static_cast<AndroidConnectivityManager::AndroidTransport>(enumValue);
47 emit androidConnManagerInstance->connManager->transportMediumChanged(transport);
48}
49Q_DECLARE_JNI_NATIVE_METHOD(transportMediumChanged)
50
51Q_DECLARE_JNI_TYPE(ConnectivityManager, "Landroid/net/ConnectivityManager;")
52
54{
55 if (!registerNatives())
56 return;
57
58 QJniObject::callStaticMethod<void>(networkInformationClass, "registerReceiver",
59 QAndroidApplication::context());
60}
61
63{
64 if (!androidConnManagerInstance())
65 return nullptr;
66 return androidConnManagerInstance->connManager->isValid()
67 ? androidConnManagerInstance->connManager.get()
68 : nullptr;
69}
70
72{
73 return registerNatives();
74}
75
77{
78 QJniObject::callStaticMethod<void>(networkInformationClass, "unregisterReceiver",
79 QAndroidApplication::context());
80}
81
82bool AndroidConnectivityManager::registerNatives() const
83{
84 static const bool registered = []() {
86 return env.registerNativeMethods(networkInformationClass, {
87 Q_JNI_NATIVE_METHOD(networkConnectivityChanged),
88 Q_JNI_NATIVE_METHOD(genericInfoChanged),
89 Q_JNI_NATIVE_METHOD(transportMediumChanged),
90 });
91 }();
92 return registered;
93}
94
96
97#include "moc_androidconnectivitymanager.cpp"
static const char networkInformationClass[]
static void transportMediumChanged(JNIEnv *env, jobject obj, jint enumValue)
static void genericInfoChanged(JNIEnv *env, jobject obj, jboolean captivePortal, jboolean metered)
static void networkConnectivityChanged(JNIEnv *env, jobject obj, jint enumValue)
static AndroidConnectivityManager * getInstance()
void transportMediumChanged(AndroidTransport transport)
\inmodule QtCore
static bool registerNatives()
Combined button and popup list for selecting options.
#define Q_GLOBAL_STATIC(TYPE, NAME,...)
GLhandleARB obj
[2]
Q_DECLARE_JNI_TYPE(File, "Ljava/io/File;")
#define Q_EMIT
#define emit
#define Q_UNUSED(x)
std::unique_ptr< AndroidConnectivityManager > connManager