目录
要求
预备知识
熟悉为 iOS 构建移动 AIR 应用程序,包括熟悉 Objective C 和 Xcode
需要的第三方产品
用户水平
中级
需要的产品
- Flash Builder 4.5 Premium(下载试用版)
示例文件
注意:要使用此原生扩展,您需要 Flash Builder 4.5.1 Premium 和 Adobe AIR 3,可以在 Adobe Labs 上获得它们的候选发行版。
NetworkInfo 类是针对 Adobe AIR 的一个原生扩展。它允许来自 ActionScript 的 AIR 应用程序开发人员获取每个网络接口的信息。
ActionScript 已提供了一个适用于桌面的 NetworkInfo 类和适用于 TV 设备的 AIR。此原生扩展提供了一个类似的类,使针对 iOS 的 AIR 应用程序也可以获取每个网络接口的信息。
附加的 ZIP 文件包含:
- 目录 NetworkInfoActionScriptLibrary 中的 ActionScript 库。此目录包含创建 NetworkInfo 扩展的 ActionScript 部分的 Flash Builder 项目。
- 目录 NetworkInfoiOSLibrary 中的 iOS 原生库。此目录包含创建 NetworkInfo 扩展的 iOS 原生部分的 Xcode 项目。要构建 Xcode 项目,首先将 FlashRuntimeExtension.h 从 <AIR_SDK>/include/FlashRuntimeExtensions.h 复制到 NetworkInfoiOSLibrary 目录。
- 一个名为 Binaries 的目录,包含 AIR 应用程序开发人员使用原生扩展所需的所有内容:ANE 文件、SWC 文件和包含扩展 ID 的文本文件。
- 一个名为 NetworkInfoUsageApp 的目录,包含使用 NetworkInfo 原生扩展的示例 AIR 应用程序。
ActionScript 库
ActionScript 库包含 NetworkInfo 类。NetworkInfo 类向 AIR 应用程序提供了这些公共方法和属性:
- public static function get networkInfo(): NetworkInfo
- public function findInterfaces(): Vector.
NetworkInfo 对象是一个单一实体。AIR 应用程序使用静态 networkInfo 属性获取这个单一 NetworkInfo 对象。
findInterfaces() 方法返回 NetworkInterface 对象的一个 Vector。NetworkInterface 类也在 ActionScript 库中定义。NetworkInterface 类提供以下公共属性:
- public function get name():String
- public function get displayName():String
- public function get mtu():int
- public function get hardwareAddress():String
- public function get active():Boolean
- public function get addresses():Vector.
addresses() 属性返回 InterfaceAddress 对象的一个 Vector。InterfaceAddress 类也在 ActionScript 库中定义。它包含以下公共属性:
- public function get address():String
- public function get broadcast():String
- public function get prefixLength():int
- public function get ipVersion():String
注意:NetworkInfo 扩展中的类的公共函数和属性(NetworkInfo、NetworkInterface 和 InterfaceAddress)通过相同的名称与现有的 ActionScript 类中的公共函数和属性对应。请参阅 ActionScript 3 Reference for the Adobe Flash Platform 中的 NetworkInfo 、 NetworkInterface 和 InterfaceAddress 。
应用程序用途
要使用 NetworkInfo 扩展,AIR 应用程序可以执行以下操作:
- 访问静态属性 NetworkInfo.networkInfo 获取 NetworkInfo 独立对象。
- 调用 NetworkInfo 独立对象的 findInterfaces() 方法获得网络接口的列表。
例如:
var ntf:Vector.<NetworkInterface> = NetworkInfo.networkInfo.findInterfaces();
注意:不要调用 new NetworkInfo()。以这种方式尝试创建 NetworkInfo 类的实例会抛出异常。
然后您可以处理返回的 Vector 中的每个 NetworkInterface 对象。例如:
for each (var interfaceObj:NetworkInterface in ntf) { // Access interfaceObj.name, interfaceObj.displayName, interfaceObj.active, // interfaceObj.hardwareAddress, and interfaceObj.mtu for each(var address:InterfaceAddress in interfaceObj.addresses) { // Access address.address, address.broadcast, address.ipVersion, and address.prefixLength } }
请注意,InterfaceAddress 类的 prefixLength 字段不受支持。它的值始终为 -1。
iOS 原生库
iOS 原生库在 Objective C 中使用原生扩展 C API 实现。原生库包含这些原生扩展 C API 的示例:
- 扩展初始化器和终结器,使用签名 FREInitializer() 和 FREFinalizer()。
- 上下文初始化器和终结器,使用签名 FREContextInitializer() 和 FREContextFinalizer()。
- 原生函数 findInterfaces(),使用签名 FREFunction()。
- FRENewObject()
- FRENewObjectFromBool()
- FRENewObjectFromInt32()
- FRENewObjectFromUTF8()
- FRESetArrayElementAt()
原生函数 findInterfaces() 调用 iOS API getifaddrs() 函数来获取设备网络接口的链接列表。该函数处理列表中的元素,返回一个 NetworkInterface 对象数组以获取扩展的 ActionScript 部分。
延伸阅读
关于开发 Adobe AIR 的原生扩展的更多信息,请参阅:
评论