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

原创 2015年04月13日 11:12:13

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




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android之监测手机网络状态的广播

今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都没有普及的情况下,基本都是包流量的,所以在做一些视频应用软件的时...

Android之监测手机网络状态的广播

今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都没有普及的情况下,基本都是包流量的,所以在做一些视频应用软件的时...

Android之监测手机网络状态的广播

版权声明:本文为博主原创文章,未经博主允许不得转载。 今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都...

Android之监测手机网络状态的广播

今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都没有普及的情况下,基本都是包流量的,所以在做一些视频应用软件的时...

Android 监测手机网络状态变化

为了让自己的程序更人性化,往往需要当网络状态发生变化时对用户进行提醒。例如,当手机由WIFI连接变为数据流量时,就需要提醒用户了,以免流量过度使用造成很不好的用户体验。 我采用动态注册广播的方法来监...

Android之监测手机网络状态的广播

今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都没有普及的情况下,基本都是包流量的,所以在做一些视频应用软件的时...

监测手机信息

  • 2015-05-07 14:29
  • 302KB
  • 下载

Android手机开发:网络连接-打开Url下载信息

1. 简单版本 /** * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容 1.创建一个URL对象 * 2.通过URL对象,创建一个HttpURLCon...

Android 工具类 —— 判断网络连接状态、GPS是否打开、基站信息和手机IMSI码

参考:http://www.jb51.net/article/32920.htm 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限。 1)判断是否有网络连接 代码...

Android手机利用USB共享网络通过Ubuntu连接网络

注意,是手机利用PC网络连网,而不是PC利用手机网络连网。 前提: 1、Ubuntu正常连接网络 2、手机已root 3、手机上安装了busybox 步骤: 1、设置Ubuntu上的IP转发 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)