4package org.qtproject.qt.android.networkinformation;
6import android.annotation.SuppressLint;
8import android.net.ConnectivityManager;
9import android.net.ConnectivityManager.NetworkCallback;
10import android.net.NetworkRequest;
11import android.net.NetworkCapabilities;
15class QtAndroidNetworkInformation {
16 private static final String
LOG_TAG =
"QtAndroidNetworkInformation";
18 private static native
void networkConnectivityChanged(
int connectivity);
19 private static native
void genericInfoChanged(
boolean captivePortal,
boolean metered);
20 private static native
void transportMediumChanged(
int transportMedium);
22 private static QtNetworkInformationCallback m_callback =
null;
42 private static class QtNetworkInformationCallback
extends NetworkCallback {
46 QtNetworkInformationCallback() {
50 public void onCapabilitiesChanged(Network
network, NetworkCapabilities capabilities) {
51 AndroidConnectivity
s;
52 if (!capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
53 s = AndroidConnectivity.Disconnected;
54 else if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED))
55 s = AndroidConnectivity.Connected;
57 s = AndroidConnectivity.Unknown;
59 final Transport transport = getTransport(capabilities);
60 if (transport == Transport.Unknown)
61 s = AndroidConnectivity.Unknown;
64 setTransportMedium(transport);
67 = capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
69 = !capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
70 genericInfoChanged(captive, metered);
73 private Transport getTransport(NetworkCapabilities capabilities)
75 if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
76 return Transport.WiFi;
77 }
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
78 return Transport.Cellular;
79 }
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)) {
80 return Transport.Bluetooth;
81 }
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
82 return Transport.Ethernet;
83 }
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)) {
85 return Transport.WiFiAware;
86 }
else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)) {
88 return Transport.LoWPAN;
93 return Transport.Unknown;
96 private void setState(AndroidConnectivity
s) {
97 if (previousState !=
s) {
99 networkConnectivityChanged(
s.ordinal());
103 private void setTransportMedium(Transport
t) {
104 if (previousTransport !=
t) {
105 previousTransport =
t;
106 transportMediumChanged(
t.ordinal());
111 public void onLost(Network network) {
112 setState(AndroidConnectivity.Disconnected);
116 private QtAndroidNetworkInformation() {
120 if (m_callback !=
null && m_callback.previousState !=
null)
121 return m_callback.previousState;
125 @SuppressLint(
"MissingPermission")
126 static
void registerReceiver(final
Context context) {
127 synchronized (m_lock) {
128 if (m_callback ==
null) {
129 ConnectivityManager
manager = getConnectivityManager(context);
130 m_callback =
new QtNetworkInformationCallback();
131 NetworkRequest.Builder builder =
new NetworkRequest.Builder();
132 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
133 builder = builder.clearCapabilities();
134 builder = builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
135 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
136 builder = builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED);
137 builder = builder.addCapability(NetworkCapabilities.NET_CAPABILITY_FOREGROUND);
139 NetworkRequest
request = builder.build();
148 static void unregisterReceiver(
final Context context) {
149 synchronized (m_lock) {
150 if (m_callback !=
null) {
151 getConnectivityManager(context).unregisterNetworkCallback(m_callback);
157 static ConnectivityManager getConnectivityManager(
final Context context) {
158 return (ConnectivityManager)
context.getSystemService(
Context.CONNECTIVITY_SERVICE);
[vector_of_multirole_objects_0]
QNetworkAccessManager manager
[0]
QNetworkRequest request(url)
[0]