Applications needing to access the overall system networking status must access the ubuntu::connectivity::NetworkingStatus class. The class has properties for the networking status and connection limitations of the system networking.
Accessing the networking status from confined applications requires the connectivity policy group.
Setup
Manager is accessed by including the appropriate header:
and then creating an instance of the NetworkingStatus:
QScopedPointer<NetworkingStatus> ns(new NetworkingStatus());
Networking Status
Status
The status of the system networking can be accessed through the ubuntu::connectivity::NetworkingStatus::status property:
if (ns->status() == NetworkingStatus::Online)
qDebug() << "We are online.";
QObject::connect(ns.data(),
&NetworkingStatus::statusChanged,
[](NetworkingStatus::Status value)
{
switch(value) {
case NetworkingStatus::Offline:
qDebug() << "System networking status changed to: Offline";
break;
case NetworkingStatus::Connecting:
qDebug() << "System networking status changed to: Connecting";
break;
case NetworkingStatus::Online:
qDebug() << "System networking status changed to: Online";
break;
}
});
Limitations
The limitations can be accessed through the ubuntu::connectivity::NetworkingStatus::limitations property:
if (ns->limitations().isEmpty())
qDebug() << "No limitations";
QObject::connect(ns.data(),
&NetworkingStatus::limitationsChanged,
[&ns](){
if (ns->limitations().isEmpty()) {
qDebug() << "No limitations.";
return;
}
qDebug() << "Limitations:";
if (ns->limitations().contains(NetworkingStatus::Limitations::Bandwith)) {
qDebug() << " - Bandwith";
}
});
The complete example (found in examples/example_networking_status.cpp):
#include <QCoreApplication>
#include <QScopedPointer>
#include <QDebug>
int
main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QScopedPointer<NetworkingStatus> ns(new NetworkingStatus());
if (ns->status() == NetworkingStatus::Online)
qDebug() << "We are online.";
QObject::connect(ns.data(),
&NetworkingStatus::statusChanged,
[](NetworkingStatus::Status value)
{
switch(value) {
case NetworkingStatus::Offline:
qDebug() << "System networking status changed to: Offline";
break;
case NetworkingStatus::Connecting:
qDebug() << "System networking status changed to: Connecting";
break;
case NetworkingStatus::Online:
qDebug() << "System networking status changed to: Online";
break;
}
});
if (ns->limitations().isEmpty())
qDebug() << "No limitations";
QObject::connect(ns.data(),
&NetworkingStatus::limitationsChanged,
[&ns](){
if (ns->limitations().isEmpty()) {
qDebug() << "No limitations.";
return;
}
qDebug() << "Limitations:";
if (ns->limitations().contains(NetworkingStatus::Limitations::Bandwith)) {
qDebug() << " - Bandwith";
}
});
app.exec();
return 0;
}