BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

NetworkInfo原生扩展示例

| 作者 Adobe 关注 0 他的粉丝 发布于 2011年9月29日. 估计阅读时间: 9 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

目录

要求

预备知识

熟悉为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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT