如何在Ubuntu手机中监测网络的连接信息

185 篇文章 6 订阅
137 篇文章 1 订阅

我们知道对于很多的网路应用来说,网路的连接信息对于我们来说非常重要。我们有必要对网路的连接信息进行监测。一旦网路连接断开,我们需要提醒用户或做一些处理。尽管目前在我们的官方网站上,还没有有关它的正式的资料,但是我们还是可以通下面的方法来得到它的API。


我们可以利用SDK的模版来创建一个最简单的QML应用。因为我们要使用connectivity,所以我们必须加入“connectivity”的security policy。




在我们的开发者网站上虽然也有NetworkStatus的介绍,但是可能并不是很全,我们可以使用如下的命令来得到更多的信息:


$qmlplugindump Ubuntu.Connectivity 1.0


显示的结果如下:


import QtQuick.tooling 1.1

// This file describes the plugin-supplied types contained in the library.
// It is used for QML tooling purposes only.
//
// This file was auto-generated by:
// 'qmlplugindump Ubuntu.Connectivity 1.0'

Module {
    Component {
        name: "connectivityqt::Connectivity"
        prototype: "QObject"
        exports: ["Connectivity 1.0", "NetworkingStatus 1.0"]
        isCreatable: false
        isSingleton: true
        exportMetaObjectRevisions: [0, 0]
        Enum {
            name: "Limitations"
            values: {
                "Bandwith": 0
            }
        }
        Enum {
            name: "Status"
            values: {
                "Offline": 0,
                "Connecting": 1,
                "Online": 2
            }
        }
        Property { name: "flightMode"; type: "bool" }
        Property { name: "FlightMode"; type: "bool" }
        Property { name: "online"; type: "bool"; isReadonly: true }
        Property { name: "limitedBandwith"; type: "bool"; isReadonly: true }
        Property { name: "Limitations"; type: "QVector<Limitations>"; isReadonly: true }
        Property { name: "Status"; type: "connectivityqt::Connectivity::Status"; isReadonly: true }
        Property { name: "wifiEnabled"; type: "bool" }
        Property { name: "WifiEnabled"; type: "bool" }
        Property { name: "UnstoppableOperationHappening"; type: "bool"; isReadonly: true }
        Property { name: "FlightModeSwitchEnabled"; type: "bool"; isReadonly: true }
        Property { name: "flightModeSwitchEnabled"; type: "bool"; isReadonly: true }
        Property { name: "WifiSwitchEnabled"; type: "bool"; isReadonly: true }
        Property { name: "wifiSwitchEnabled"; type: "bool"; isReadonly: true }
        Property { name: "HotspotSwitchEnabled"; type: "bool"; isReadonly: true }
        Property { name: "hotspotSwitchEnabled"; type: "bool"; isReadonly: true }
        Property { name: "hotspotSsid"; type: "QByteArray" }
        Property { name: "hotspotPassword"; type: "string" }
        Property { name: "hotspotEnabled"; type: "bool" }
        Property { name: "hotspotMode"; type: "string" }
        Property { name: "hotspotStored"; type: "bool"; isReadonly: true }
        Property { name: "Initialized"; type: "bool"; isReadonly: true }
        Signal {
            name: "flightModeUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "onlineUpdated"
            Parameter { name: "value"; type: "bool" }
        }
        Signal {
            name: "limitedBandwithUpdated"
            Parameter { name: "value"; type: "bool" }
        }
        Signal {
            name: "limitationsUpdated"
            Parameter { type: "QVector<Limitations>" }
        }
        Signal {
            name: "statusUpdated"
            Parameter { name: "value"; type: "connectivityqt::Connectivity::Status" }
        }
        Signal {
            name: "wifiEnabledUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "unstoppableOperationHappeningUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "flightModeSwitchEnabledUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "wifiSwitchEnabledUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "hotspotSwitchEnabledUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "hotspotSsidUpdated"
            Parameter { name: "name"; type: "QByteArray" }
        }
        Signal {
            name: "hotspotPasswordUpdated"
            Parameter { name: "password"; type: "string" }
        }
        Signal {
            name: "hotspotEnabledUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "hotspotModeUpdated"
            Parameter { name: "mode"; type: "string" }
        }
        Signal {
            name: "hotspotStoredUpdated"
            Parameter { type: "bool" }
        }
        Signal {
            name: "reportError"
            Parameter { name: "reason"; type: "int" }
        }
        Signal { name: "initialized" }
        Method {
            name: "setFlightMode"
            Parameter { name: "enabled"; type: "bool" }
        }
        Method {
            name: "setwifiEnabled"
            Parameter { name: "enabled"; type: "bool" }
        }
        Method {
            name: "setHotspotEnabled"
            Parameter { name: "active"; type: "bool" }
        }
        Method {
            name: "setHotspotSsid"
            Parameter { name: "ssid"; type: "QByteArray" }
        }
        Method {
            name: "setHotspotPassword"
            Parameter { name: "password"; type: "string" }
        }
        Method {
            name: "setHotspotMode"
            Parameter { name: "mode"; type: "string" }
        }
    }
}



这里我们可以看到有一个叫做“status”的属性。我们可以通过监测这个属性的变化而得到网路的连接状态的变化。我们的main.qml的文件如下:


import QtQuick 2.0
import Ubuntu.Components 1.1
import Ubuntu.Connectivity 1.0
import Ubuntu.Components.ListItems 0.1 as ListItem

/*!
    \brief MainView with a Label and Button elements.
*/

MainView {
    id: root
    // objectName for functional testing purposes (autopilot-qt5)
    objectName: "mainView"

    // Note! applicationName needs to match the "name" field of the click manifest
    applicationName: "networkstatus.ubuntu"

    /*
     This property enables the application to change orientation
     when the device is rotated. The default is false.
    */
    //automaticOrientation: true

    // Removes the old toolbar and enables new features of the new header.
    useDeprecatedToolbar: false

    width: units.gu(50)
    height: units.gu(75)

    property real margins: units.gu(2)
    property real buttonWidth: units.gu(9)

    Connections {
        target: NetworkingStatus
        // full status can be retrieved from the base C++ class
        // status property
        onStatusUpdated: {
            if (value === NetworkingStatus.Offline) {
                console.log("Status: Offline")
            }
            if (value === NetworkingStatus.Connecting) {
                console.log("Status: Connecting")
            }
            if (value === NetworkingStatus.Online) {
                console.log("Status: Online")
            }

            online.subText = NetworkingStatus.online ? "yes" : "no";
        }

        onWifiEnabledUpdated: {
            console.log("wifiEnabledUpdated: " + NetworkingStatus.WifiEnabled);
        }

        onFlightModeUpdated: {
           console.log("FlightModeUpdated: " + NetworkingStatus.flightMode);
           flightMode.subText = NetworkingStatus.flightMode ? "yes" : "no"
        }

        onHotspotEnabledUpdated: {
            console.log("hotspotEnabledUpdated: " + NetworkingStatus.hotspotEnabled)
            hotspotEnabled.subText = etworkingStatus.hotspotEnabled ? "yes" : "no"
        }

        onUnstoppableOperationHappeningUpdated: {
            console.log("unstoppableOperationHappeningUpdated: " + NetworkingStatus.UnstoppableOperationHappening);
        }

        onWifiSwitchEnabledUpdated: {
            console.log("wifiSwitchEnabledUpdated: " + NetworkingStatus.wifiSwitchEnabled);
        }

        onFlightModeSwitchEnabledUpdated: {
            console.log("flightModeSwitchEnabledUpdated: " + NetworkingStatus.flightModeSwitchEnabled);
        }

        onHotspotSsidUpdated: {
            console.log("hotspotSsidUpdated: " + NetworkingStatus.hotspotSsid);
        }

        onHotspotPasswordUpdated: {
            console.log("hotspotPasswordUpdated: " + NetworkingStatus.password);
            hotspotPassword.subText = NetworkingStatus.password;
        }

        onHotspotStoredUpdated: {
            console.log("hotspotStoredUpdated: " + NetworkingStatus.hotspotStored);
        }

        onInitialized: {
            console.log("initialized");
        }
    }

    function getStatus(status) {
        console.log("status: " + status);
        switch(status) {
        case 0:
            return "Offline";
        case 1:
            return "Connecting";
        case 2:
            return "Online"
        }
    }

    Page {
        title: i18n.tr("Networking Status")

        ListModel {
            id: mymodel
        }

        Flickable {
            id: scrollWidget
            anchors.fill: parent
            contentHeight: contentItem.childrenRect.height
            boundsBehavior: (contentHeight > root.height) ? Flickable.DragAndOvershootBounds :
                                                            Flickable.StopAtBounds
            flickableDirection: Flickable.VerticalFlick

            Column {
                id: layout
                anchors.left: parent.left
                anchors.right: parent.right
                spacing: units.gu(1)

                ListItem.Subtitled {
                    id: online
                    text: i18n.tr("online")
                    subText: NetworkingStatus.online ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: bandwidth
                    text: i18n.tr("Bandwith")
                    subText: NetworkingStatus.limitedBandwith ? "Bandwith limited" : "Bandwith not limited"
                }

                ListItem.Subtitled {
                    id: flightMode
                    text: i18n.tr("flight mode")
                    subText: NetworkingStatus.flightMode ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: status
                    text: i18n.tr("Status")
                    subText: getStatus(NetworkingStatus.Status)
                }

                ListItem.Subtitled {
                    id: wifiEnabled
                    text: i18n.tr("wifiEnabled")
                    subText: NetworkingStatus.wifiEnabled ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: flightModeSwichEnabled
                    text: i18n.tr("FlightModeSwitchEnabled")
                    subText: NetworkingStatus.FlightModeSwitchEnabled ? "yes" : "no"
                }

                ListItem.Subtitled {
                    text: i18n.tr("WifiSwitchEnabled")
                    subText: NetworkingStatus.WifiSwitchEnabled ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: hotspotSwitchEnabled
                    text: i18n.tr("HotspotSwitchEnabled")
                    subText: NetworkingStatus.HotspotSwitchEnabled ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: hotspotEnabled
                    text: i18n.tr("hotspotEnabled")
                    subText: NetworkingStatus.hotspotEnabled ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: hotspotPassword
                    text: i18n.tr("hotspotPassword")
                    subText: NetworkingStatus.hotspotPassword
                }

                ListItem.Subtitled {
                    id: hotspotStored
                    text: i18n.tr("hotspotStored")
                    subText: NetworkingStatus.hotspotStored ? "yes" : "no"
                }

                ListItem.Subtitled {
                    id: initialized
                    text: i18n.tr("Initialized")
                    subText: NetworkingStatus.Initialized ? "yes" : "no"
                }
            }
        }
    }
}



最终运行我们的应用,我们可以看到在wifi断开和连接上时的状态变化:


     


测试代码在:https://github.com/liu-xiao-guo/networkstatus




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值