通常情况下,无论应用程序是否连接到特定的 IP,它都需要一个特定的网络状态或上下文来运行,从而确保仅使用正确的配置,或确保设备处于在线状态。虽然 AppFramework 在系统级别无法控制其中某些内容,但是它提供的组件可访问这些内容从而告知系统的运行情况。
系统提供的配置
网络配置由设备处理和存储,通常情况下不需要由应用程序处理。但是,如果应用程序不需要了解设备的网络连接状态,那么 Network 组件可以对系统已知的网络配置提供只读的访问权限,以允许应用程序检测这些系统连接和功能。
对于许多应用程序而言,它们需要从网络中获得的具体支持只是在线功能以及可以连接到服务。只需检查 isOnline 属性,即显示设备当前是否在线的布尔值。该属性可用于修改应用程序的行为,以执行无需网络访问权限的交错函数,或者如果需要在线,则显示一条错误消息。
Column {
anchors {
left: parent.left
right: parent.right
bottom: parent.bottom
margins: 20 * AppFramework.displayScaleFactor
}
spacing: 5
Item {
height: 20
width: parent.width
}
Button {
anchors.horizontalCenter: parent.horizontalCenter
text: "Sign In"
onClicked: {
if (AppFramework.network.isOnline) {
messageDialogOnline.open();
} else {
messageDialogOffline.open();
}
}
MessageDialog {
id: messageDialogOnline
title: "Network Connection"
text: "This device is currently online."
}
MessageDialog {
id: messageDialogOffline
title: "Network Error"
text: "Please connect to a network to get started."
}
}
}
网络地址
NetworkAddress 组件可存储单个网络 IP 地址: 除了与其他组件一起执行连接到主机和设置服务器等操作外,它还可以提供用于确定地址是否拥有环回或组播等特殊目的的属性。
环回是一种特定范围的 IP 地址,用于向同一台计算机发送输出信号,通常用于测试目的。针对 IPv4 设备,127.0.0.0 到 127.255.255.255 的范围可作为环回地址,通常使用的大多数地址为 127.0.0.1 和使用命名本地主机。针对 IPv6,由于完整地址长度过长,保留给环回的地址通常简化为 ::1。如果对象存储的地址是环回地址,NetworkAddress isLoopback 布尔属性将返回 true。
组播地址是为组播通信保留的大范围地址,信息会通过地址发送到一组目的地计算机。对于使用 AppFramework 构建的应用程序,使用组播的最常见情况是用户数据报协议 (UDP),即一种速度优先于可靠性的传输协议,但是也有其他使用组播的情况。针对 IPv4 设备,组播地址的范围是 224.0.0.0 到 239.255.255.255,而 IPv6 组播地址则使用前缀 ff00::/8。但是,这两种协议均有一部分范围保留给更为具体的组播用途。如果对象存储的地址是任何类型的组播地址,NetworkAddress isMulticast 布尔属性将返回 true。
NetworkAddress 还包含 isNull 属性,可用于识别任意主机或接口的无效空地址,以及可确定存储的 IP 地址是否位于给定子网的 isInSubnet 方法。这些函数可用于确保仅传递到对应用程序需求而言有效的 IP 地址。