NetworkInfo 原生扩展示例

阅读数:906 2011 年 9 月 28 日

话题:语言 & 开发

目录

要求

预备知识

熟悉为 iOS 构建移动 AIR 应用程序,包括熟悉 Objective C 和 Xcode

需要的第三方产品

用户水平

中级

需要的产品

示例文件

注意:要使用此原生扩展,您需要 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.<NetworkInterface>

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.<InterfaceAddress>

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 中的NetworkInfoNetworkInterfaceInterfaceAddress

应用程序用途

要使用 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 的原生扩展的更多信息,请参阅:

查看原文:NetworkInfo native extension sample