WaterLevelSensor/wifihelper.cpp

70 lines
2.2 KiB
C++
Raw Normal View History

2026-09-14 15:31:21 +05:30
#include "wifihelper.h"
#include <QCoreApplication>
#include <QGuiApplication>
#include <QJniObject>
#include <QPermissions>
WiFiHelper::WiFiHelper(QObject *parent)
: QObject{parent}
{
}
QString WiFiHelper::getWifiSsid() {
// Get Android application context in Qt 6
QJniObject context = QNativeInterface::QAndroidApplication::context();
if (!context.isValid()) return QString();
// Get WifiManager service
QJniObject wifiService = QJniObject::fromString("wifi");
QJniObject wifiManager = context.callObjectMethod(
"getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;",
wifiService.object()
);
if (!wifiManager.isValid()) return QString();
// Fetch WifiInfo
QJniObject wifiInfo = wifiManager.callObjectMethod(
"getConnectionInfo",
"()Landroid/net/wifi/WifiInfo;"
);
if (!wifiInfo.isValid()) return QString();
// Get SSID string
QJniObject ssidJni = wifiInfo.callObjectMethod(
"getSSID",
"()Ljava/lang/String;"
);
if (!ssidJni.isValid()) return QString();
QString ssid = ssidJni.toString();
// Android returns SSIDs wrapped in double quotes (e.g., "\"MyWiFi\"")
if (ssid.startsWith('"') && ssid.endsWith('"') && ssid.length() > 1) {
ssid = ssid.mid(1, ssid.length() - 2);
}
return ssid;
}
void WiFiHelper::requestPermissionsAndFetch() {
QLocationPermission locationPermission;
locationPermission.setAccuracy(QLocationPermission::Accuracy::Precise);
Qt::PermissionStatus status = qApp->checkPermission(locationPermission);
if (status == Qt::PermissionStatus::Granted) {
emit ssidRetrieved(getWifiSsid());
} else {
qDebug() << "Requesting permission.";
qApp->requestPermission(locationPermission, this, [this](const QPermission &permission) {
if (permission.status() == Qt::PermissionStatus::Granted) {
qDebug() << "Requested permission and got ssid";
emit ssidRetrieved(getWifiSsid());
} else {
qDebug() << "Failed to get WiFi SSID due to denied permission.";
emit ssidRetrieved("Permission Denied");
}
});
}
}