来源:AIR Tip 7: Using Command Line Arguments
这篇教程基于AIR Beta3,它将让你明白在AIR中使用命令行的要点。
AIR应用有一个非常有用的与操作系统交互的特性,就是接受命令行参数。这些参数将通过InvokeEvent [ActionScript | JavaScript]传递到AIR应用。
接受InvokeEvent
要接受一个InvokeEvent,你必须为你的应用的NativeApplication实例注册一个事件监听器。它可以被定义在你的基于Flex开发的AIR应用的MXML或Actionscript中,基于Flash开发的AIR应用的Actionscript中,或者基于HTML/JavaScript开发的AIR应用的JavaScript中。所有的这些定义方式都显示在示例代码1中。
mxml:
-
<mx:WindowedApplication
-
xmlns:mx=“http://www.adobe.com/2006/mxml”
-
layout=“vertical”
-
invoke=“onInvoke(event)”>
-
…
-
</mx:WindowedApplication>
ACTIONSCRIPT:
-
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);
JAVASCRIPT:
-
air.NativeApplication.nativeApplication.addEventListener(air.InvokeEvent.INVOKE, onInvoke);
处理InvokeEvent
当你接受了InvokeEvent,命令行参数会作为一个数组 [ ActionScript | JavaScript ]传递过来。AIR本身不能区别命令行中的“命令”和“参数”。如果你需要这个功能,就需要自己去实现它了。
示例
在今天的示例中,你将学会创建一个AIR应用来响应命令行参数。这个示例是使用FlexBuilder3制作的,但是你可以很轻松的稍微修改一下,用Flash或HTML/JavaScript来开发(如果你发现了个别的问题,请留下你的评论)。
InvokeEvent的其它使用方法
InvokeEvent总是在你的应用试图打开操作系统中的一个文件时被使用。这个文件的名称是作为一个InvokeEvent的参数传递到AIR应用中的。这是非常重要的,如果你注册了自有的文件类型。当用户双击了一个属于你自定义类型的文件时,InvokeEvent事件将被分配。如果你从未配置你的应用去监听这个事件,你的应用就什么都不会做。我将在稍后的培训中公布更多关于自定义文件类型的信息。
源码
Download (3 kb)
AIR Application (289 kb)
参考
Developer Guide – Capturing Command Line Arguments (HTML / JavaScript)
Developer Guide – Capturing Command Line Arguments (Flex / ActionScript)
Developer Guide – Capturing Command Line Arguments (Flash)
Tags: AIR, AIR教程
来源:AIR Tip 6: Launching an Application from the Browser
这个教程将让你了解如何从浏览器中运行一个AIR应用并向它传递参数。本教程基于Adobe AIR Beta3。(AIR1.0与Beta3之间基本无差异…译者注)
AIR Beta3引入了浏览器接口(API)。这个API允许AIR应用可以从一个WEB浏览器中运行,并且它允许将参数从浏览器中传递到AIR应用里。
设置你的AIR应用
应用必须设置allowBrowserInvocation值为True来允许从浏览器API中接受事件(实现方式见代码示例1)。一旦这个值被设置了,你的AIR应用将接受一个BrowserInvokeEvent[参考]事件,当它通过浏览器API被调用的时候。
XML:
-
<!– Whether the application can be launched when the user clicks a link in a web browser.
-
Optional. Default false. –>
-
<allowBrowserInvocation>true</allowBrowserInvocation>
了解API
浏览器API包含了一个标签,launchApplication,它事实上调用了你的AIR应用[更多信息]。这个应用可以得到3个参数(其中有2个是必须的)。
1.appID – 你的AIR应用的唯一标示
2.pubID – 你的AIR应用的发布者ID
3.arguments – 一个传递到你的AIR应用中的参数的数组
获取你的发布者ID
发布者ID[参考]和其它的应用程序一样,创建自一个授权证书。这个ID可以通过以下两种方式获得:
1.在每个AIR应用中,发布者ID可以用NativeApplication.nativeApplication.publisherID属性来引用
2.当一个AIR应用被安装了,发布者ID会保存在META-INF/AIR/publisherid文件中
创建一个电影用于运行AIR应用
作为一个良好的开始,你可以查看使用Adobe AIR SDK实现的安装示例。这个示例的源码可以在src/badge文件夹中找到。这个示例已经写入了载入浏览器API的代码。你将在示例代码2中看到它们。
ACTIONSCRIPT:
-
…
-
_loader = new Loader();
-
var loaderContext:LoaderContext = new LoaderContext();
-
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
-
_loader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
-
try {
-
_loader.load(new URLRequest(BROWSERAPI_URL_BASE + “/air.swf”), loaderContext);
-
} catch (e:Error) {
-
root.statusMessage.text = e.message;
-
}
-
…
Adobe AIR SDK包含了检测AIR是否已经安装的代码。我们可以修改这个,以便我们可以在自定义的应用中显示状态信息。
ACTIONSCRIPT:
-
private function onInit(e:Event):void {
-
_air = e.target.content;
-
switch (_air.getStatus()) {
-
case “installed” :
-
statusMessage.text = “AIR is installed and has been detected.”
-
stage.addEventListener(MouseEvent.CLICK,onButtonClicked);
-
break;
-
case “available” :
-
// AIR is Available
-
statusMessage.text = “AIR is not installed – application cannot be launched.”
-
break;
-
case “unavailable” :
-
// AIR Not Available
-
statusMessage.text = “AIR is not installed – application cannot be launched.”
-
break;
-
}
-
}
你可以很容易的扩展这个示例,在AIR未安装的时候去安装它(这样对你的应用非常有益处),但是在这个教程中,我们只是实现在已经安装的情况下,去运行一个AIR应用。示例代码4标明了如何使用installApplication标签来运行一个应用。
ACTIONSCRIPT:
-
private function onButtonClicked(e:Event):void {
-
statusMessage.text = “Attempting to Launch AIR Application”;
-
_air.launchApplication(_applicationID,_publisherID,_arguments);
-
}
在网页上插入这个运行管理器
示例代码5展示了如何插入这个运行管理器到网页中去(使用SWFObject)。所有的参数都通过浏览器API传递到了管理器中,其实是使用了FlashVars方法,在SWFObject中,使用的是so.addVariable标签。
在这个示例中,我把applicationID和publisherID使用FlashVars传递到了电影中,但是你或许不希望所有这些信息都被显示出来。在这里,你还是努力把这些代码敲入你的电影中吧。
JAVASCRIPT:
-
var so = new SWFObject(“launchMovie.swf”, “badge”, “250″, “75″, “9.0.115″, “#FFFFFF”);
-
so.addVariable( “applicationID”, “net.davidtucker.airtips.BrowserAPITest” );
-
so.addVariable( “publisherID”, “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.1″ );
-
so.addVariable( “arguments”, “Application Launched from Browser,Argument 2″ );
-
so.write(“foo_flashcontent”);
测试示例
要使这个示例正常工作,你需要拥有AIR TIP 5中说到的BrowserInvokeEvent示例。你可以点击这里安装。
源文件
Download (15 kb)
参考资料
Getting the application and publisher identifiers (Developer Guide)
Checking from a web page if an AIR application is installed (Developer Guide)
Launching an installed AIR application from the browser (Developer Guide)
Loading the air.swf file (Developer Guide)
Tags: AIR, AIR教程
来源:AIR Tip 5: Passing Arguments to an Application on Install
这个教程将告诉你当一个AIR应用使用Badge的方式来安装时,如何控制应用的安装进程并传递参数。这个教程包含了一篇文章和一个教学视频,它是基于AIR Beta3的版本的。
有人在评论里问我,当使用AIR Installer Badge来安装AIR应用的时候,是否可以传递参数到应用程序中去。答案是:可以,又不可以。首先,它不能直接完成这个功能,当然,你可以很容易的修改Badge文件以使它支持这个功能;其次,要让一个AIR应用接受BrowserInvokeEvent[参考],必须将应用配置文件的allowBrowserInvocation属性设置为True。
修改AIR Install Badge
假如你需要这个功能,那么你就要创建一个修改过的AIR Install Badge。源代码中附带了Adobe AIR Beta3的SDK。你可以在src/badge这个目录中找到它。你将需要修改AIRBadge.as这个文件。
1.你需要为这个类添加一个名为_arguments的属性。所有属性位于类的最底部,所以你可以把这个属性添加到其它属性的后面。这个属性的类型是数组。
ACTIONSCRIPT:
-
…
-
private var _messageColor: String;
-
private var _buttonColor: String;
-
private var _imageURL: String;
-
private var _appURL: String;
-
private var _appName: String;
-
private var _airVersion: String;
-
private var _arguments: Array;
-
…
2.然后,你需要把参数分配到SWF文件中的_arguments属性。这个步骤是在构造函数中完成的。你需要把传递的字符串参数用Split转换为数组。你可以使用String类提供的Split标签来完成这个功能。在这个例子里,你可以用逗号作为数组的分隔符。
ACTIONSCRIPT:
-
…
-
_imageURL = validateURL(parameters["imageurl"]);
-
_airVersion = String(parameters["airversion"]);
-
_appURL = validateURL(parameters["appurl"]);
-
_arguments = String(parameters["arguments"]).split(“,”);
-
…
3.最后,你需要把_arguments作为第三个参数传递给_air.installApplication标签。这个标签在onButtonClicked函数中被调用了两次,你需要同时更新它们两个。
ACTIONSCRIPT:
-
…
-
_air.installApplication( _appURL, _airVersion, _arguments );
-
…
通过这些更改,现在你可以传递参数到Badge安装器中了,随后这些参数会被传递到你的AIR应用安装进程中去。作为一个示例,我创建了一个AIR的应用,用来显示所有传递给它的参数,它同时也显示其它从BrowserInvokeEvent中获取的参数。
针对这个安装过程,我修改了我的InstallBadge.js文件来包含所有的参数(这些参数是用Flashvars传递的)。在这个示例里我创建了一个ColdFusion文件用来传递IP地址和服务器名称到应用中。
这个AIR应用列出了所有的BrowserInvokeEvent传递给它的参数。下面你将看到这个示例。
在站点中加入一个修改过的Dadge
最近我为Adobe AIR开发者中心写了一篇名为《使用Badge安装特性无缝配置Adobe AIR应用》的文章。 这篇文章详细介绍了如何在一个页面中引用Badge。在这个例子中我只是稍微修改了一下这些文件(添加了一些典型的参数)。
首先,我修改了InstallBadge.js文件,并且我把这个新的文件放在了这个教程之中。其次,我添加了一个全局变量(airApplicationArguments)到页面的头部。这是一个逗号分隔的参数:
JAVASCRIPT:
-
// AIR Application Arguments
-
var airApplicationArguments = “First Argument,Second Argument”;
设置你的AIR应用
这是两个为了让你的AIR应用可以接受BrowserInvokeEvents事件所必须做的两个设置。首先,你需要修改你的AIR配置文件,以允许它接受这些事件。确保allowBrowserInvocation这个属性在你的XML配置文件中设置为True。
XML:
-
<!– Whether the application can be launched when the user clicks a link in a web browser.
-
Optional. Default false. –>
-
<allowBrowserInvocation>true</allowBrowserInvocation>
其次,你需要告诉你的AIR应用去监听这些事件,如下所示:
ACTIONSCRIPT:
-
import flash.events.BrowserInvokeEvent;
-
private function init():void {
-
NativeApplication.nativeApplication.addEventListener(BrowserInvokeEvent.BROWSER_INVOKE,onBrowserInvoke);
-
}
-
private function onBrowserInvoke(e:BrowserInvokeEvent):void {
-
// Code to React to BrowserInvokeEvent
-
}
示例程序
这个示例AIR应用(正如你在视频中所看到的)是可用的。它显示了所有通过BrowserInvokeEvent传递给它的信息。这个程序的源码集成在右键菜单里,你点击右键就可以看到。
附加文件
安装AIR应用 – Click Here
源文件下载 (636 kb)
参考文献
Livedocs – BrowserInvokeEvent
Developer Center – Deploying Adobe AIR applications seamlessly with the badge install feature
Developer Guide – Launching an Installed AIR Application from the Browser
Tags: AIR, AIR教程
原文地址:
Save a local image file (JPEG or PNG) from an image snapshot
如果你想保存从视频,图表或表格中获取的图片数据到本地,可以使用BitmapData类。
摘要:
使用BitmapData类来创建一个包含了从组件中获取的图片数据的对象,使用mx.graphics.codec包提供的方法编码为JPEG或PNG格式,然后使用AIR API提供的File和FileStream类保存到本地。
具体方法:
首先我们我们需要得到屏幕的截图,要做到这一点,我们要使用BitmapData类。比如我们想从一个命名为myChart的线状图表上获取截图:
import flash.display.BitmapData;
var bmpd:BitmapData = new BitmapData(myChart.width,myChart.height);
bmpd.draw(myChart);
然后我们需要把bitmapdata对象编译为ByteArray对象,这样我们就可以保存为文件了。这个ByteArray对象需要被格式化,我们可以使用mx.graphics.codec包中的JPEGEncoder和PNGEncoder类来实现它。
编码为JPEG格式:
import mx.graphics.codec.JPEGEncoder;
//create a new instance of the encoder, and set the jpeg compression level from 0 to 100
var jpgenc:JPEGEncoder = new JPEGEncoder(80);
//encode the bitmapdata object and keep the encoded ByteArray
var imgByteArray:ByteArray = jpgenc.encode(bmpd);
编码为PNG格式:
import mx.graphics.codec.JPEGEncoder;
//create a new instance of the encoder
var pngenc:PNGEncoder = new PNGEncoder();
//encode the bitmapdata object and keep the encoded ByteArray
var imgByteArray:ByteArray = pngenc.encode(bmpd);
现在我们已经准备好了ByteArray数据,我们只需要把它保存到本地就可以了。我们可以用File和File Stream类来实现。
建立一个JPEG文件参照:
//gets a reference to a new empty jpg image file in user desktop
var fl:File = File.desktopDirectory.resolvePath(“snapshot.jpg”);
建立一个PNG文件参照:
//gets a reference to a new empty jpg image file in user desktop
var fl:File = File.desktopDirectory.resolvePath(“snapshot.png”);
现在我们可以把ByteArray用File Stream保存到文件中。
//Use a FileStream to save the bytearray as bytes to the new file
var fs:FileStream = new FileStream();
try{
//open file in write mode
fs.open(fl,FileMode.WRITE);
//write bytes from the byte array
fs.writeBytes(imgByteArray);
//close the file
fs.close();
}catch(e:Error){
trace(e.message);
}
参加以下的示例:
Sample applications
save_img.zip
Tags: AIR, AIR教程
来源:AIR Tip 4: Calling a SOAP Webservice
这些日子,关于如何让单独的应用程序从互联网的不同位置获取数据成了一个普遍的话题。这是可以让AIR成为一个伟大的应用平台的特性中的一个。
在开始之前,我们需要创建一个非常简单的Coldfusion组件。这个组件包含了一个函数”getStuff”。如果你输入了你的名字,它就会返回一个字符串“你的姓名是…”。如果你把它放在你的网站上的某一个地方,就可以通过在文件名后添加”?wsdl”把它发布为一个webservice。这就是你把一个Coldfusion组件转换成一个SOAP协议的Webservice的所有步骤。
参考:Coldfusion 8 and Web Services
注意:我计划写一篇关于如何在JavaScript中使用Consuming Coldfusion Webservices的文章。这篇文章只是提到了这方面的一些基础。
Coldfusion:
-
<cfcomponent>
-
<cffunction name=“getStuff” access=“remote” returnType=“String”>
-
<cfargument name=“personName” required=“true” type=“string” />
-
<cfreturn “Your Name is “ & personName />
-
</cffunction>
-
</cfcomponent>
呼叫一个Webservice,在Flex和Javascript中是完全不同的方法。在Flex中,你只需要简单的使用标签即可。在标签中你可以定义”操作”来和Webservice关联。在这个示例中,我们将定义一个”getStuff”作为其中一个操作。我们将添加一个”onResult”函数到操作的返回事件上。这个处理返回的函数只是简单的将返回结果赋值给场景中的一个文本标签。
mxml:
-
<!–
-
WEB SERVICES
-
–>
-
<mx:WebService
-
id=“sampleService”
-
wsdl=“http://yourDomain/SoapTest.cfc?wsdl”>
-
<mx
peration name=“getStuff” result=“onResult(event)” /> -
</mx:WebService>
Actionscript:
-
import mx.rpc.events.ResultEvent;
-
private function callService(e:MouseEvent):void {
-
sampleService.getStuff.send(myName.text);
-
}
-
private function onResult(e:ResultEvent):void {
-
resultLabel.text = e.result as String;
-
}
在JavaScript中,我们需要使用XMLHTTPRequest对象,就像我们在最后一个Tip所做的。基本上,我们将要添加一对自定义的Header,来传输SOAP数据包。
你可以参考”wsdl”文件来了解SOAP数据包。要参照wsdl文件,你只需在你的浏览器中敲入webservice文件的地址并加上”?wsdl”的后缀即可。wsdl描述了你的Webservice的细节。
参考资料:WSDL Tutorial
-
var xmlhttp;
-
var appXML;
-
function callService() {
-
var myName = document.getElementById(“myName”).value;
-
var url = “http://yourDomain/SoapTest.cfc?wsdl”;
-
xmlhttp = new XMLHttpRequest();
-
xmlhttp.open(“POST”, url, true);
-
xmlhttp.onreadystatechange=function(){
-
if (xmlhttp.readyState==4) {
-
var mainDiv = document.getElementById(‘result’);
-
mainDiv.innerHTML = xmlhttp.responseText;
-
}
-
}
-
xmlhttp.setRequestHeader(“Content-Type”, “text/xml”);
-
xmlhttp.setRequestHeader(‘SOAPAction’,‘http://yourDomain/SoapTest.cfc?wsdl’);
-
xmlhttp.send(“<?xml version=’1.0′ encoding=’UTF-8′?>”+“\n\n“+
-
‘<soapenv:Envelope’+
-
‘ xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/”‘+
-
‘ xmlns:xsd=”http://www.w3.org/2001/XMLSchema”‘+
-
‘ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>’+
-
‘<soapenv:Body>’+
-
‘<ns1:getStuff xmlns:ns1=”http://communications”‘+
-
‘ soapenv:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>’+
-
‘<personName xsi:type=”xsd:string”>’ + myName + ‘</personName>’+
-
‘</ns1:getStuff>’+
-
‘</soapenv:Body>’+
-
‘</soapenv:Envelope>’);
-
}
对于Flex来说,这是一个非常简单的示例,而在JavaScript中,你必须记住以下的要点:
- 判断各种情况,确保你考虑到了所有的-一个小小的异常就会引发错误
- 你可以将你的函数写在AIR之外,这样你就可以使用类似Firebug的工具来跟踪调试
- 当呼叫一个Coldfunsion Webservice的时候,如果是一个需要RDS密码的页面,一定是你忘记了设置SOAPAction header
- 在xmlhttp.open()函数中使用”POST”标签
Flex Example
Source Code
JavaScript Example
Source Code
Coldfusion Component
Source Code
Tags: AIR, AIR教程
来源:AIR Tip 3: What Version is My Application
每个AIR应用程序都有一个XML格式的应用程序描述文件,用于定义程序的一些属性。这个文件允许开发人员定义应用的ID,版本,名称,以及其它的属性。在AIR Beta3的版本中,可以用NativeApplication.nativeApplication.applicationDescriptor来引用这个文件(ActionScript),如果是JavaScript,可以用air.NativeApplication.nativeApplication.applicationDescriptor。
版本:这个教程基于AIR Beta3
ActionScript示例:
使用这些代码,我们就能获取应用程序描述文件的引用了:
-
private var airApplicationID:String = “”;
-
private var airApplicationVersion:String = “”;
-
private var airApplicationName:String = “”;
-
private function getApplicationInformation():void {
- // Get the Application Descriptor File
- var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor;
- // Define the Namespace (there is only one by default in the application descriptor file)
-
var air:Namespace = appXML.namespaceDeclarations()[0];
-
// Use E4X To Extract the Needed Information
-
this.airApplicationID = appXML.air::id;
-
this.airApplicationVersion = appXML.air::version;
-
this.airApplicationName = appXML.air::name;
-
// Retrieve any additional information from the application descriptor file
-
}
这个示例定义了3个变量:名称,程序ID,和版本号。使用E4X,你可以从应用程序描述文件中获取应用的每一个属性的值。当然在E4X中,在你告诉它使用哪个命名空间之前,没有一个值会被返回。namespaceDeclarations标签返回了一个包含XML对象所有命名空间的数组。通常情况下,应用程序描述文件只有一个独立的命名空间。通过使用这种方式定义命名空间,你就可以保证这个标签也可以很好的工作在未来的AIR版本中(除非AIR的API更改了)。
JavaScript示例:
在这个JavaScript示例中,使用方法只有微小的改变。应用程序描述文件要引用自NativeApplication类,但是JavaScript认为返回的值是字符串(并不是XML)。你必须首先创建一个DOM Parser对象并传递给它XML值。这样你就可以从XML中获得返回值。
-
var airApplication = {};
-
function getVersion() {
-
// Get Application Descriptor File
-
var appXML = air.NativeApplication.nativeApplication.applicationDescriptor;
-
// Parse the Application Descriptor File as XML
-
var xmlObject = (new DOMParser()).parseFromString(appXML, “text/xml”);
-
// Get the Needed Values from the XML
-
airApplication.version = xmlObject.getElementsByTagName(‘version’)[0].firstChild.nodeValue;
-
airApplication.applicationID = xmlObject.getElementsByTagName(‘id’)[0].firstChild.nodeValue;
-
airApplication.name = xmlObject.getElementsByTagName(‘name’)[0].firstChild.nodeValue;
-
}
下面的示例代码中说明了如何创建一个可以重新获取这些信息的AIR应用程序。当然这只是一个示例(不是一个真实的应用),所以不提供AIR文件的下载。
Flex Application
Source Code
JavaScript Application
Source Code
Tags: AIR, AIR教程
来源:AIR Tip 2: Going Fullscreen
AIR的一个重要特性就是允许使用全屏模式。诚然这种模式可能被滥用-但如何运用合理的话,它毕竟可以带给我们更多的思路。一个非常好的使用全屏模式的例子是Danier Dura的Twittercamp。当你点击这个程序的标志图片(位于右下角)时,它会打开一个全屏的窗口。这种形式非常适用于展示一些介绍信息-就像在一个等离子或液晶的电视上。
版本:这个教程将基于AIR Beta3(现在AIR已经有了1.0的正式版–译者注)
AIRBeta3的新特性:在AIR Beta3之前的版本中只提供了两种显示模式:普通模式和全屏模式。全屏模式并不是一个支持交互的模式。这就意味着在全屏状态下,用户不能完成一些交互的任务(比如在一个文本框中输入文本)。现在,AIR Beta3提供了第三种模式:全屏交互模式。
使用ActionScript进入全屏模式:AIR应用的主场景拥有一个displayState属性,同时AIR的运行时框架中也包含了一个StageDisplayState类,这个类为三种不同的场景模式定义了3个静态常量。使用这些类你可以让你的AIR应用进入下述的任意一种模式(下面是示例代码)。
1.// Enter Fullscreen Interactive State
2.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
3.// Enter Standard Fullscreen State
4.stage.displayState = StageDisplayState.FULL_SCREEN;
5.// Enter Normal State
6.stage.displayState = StageDisplayState.NORMAL;
使用JavaScript进入全屏模式:用实现的逻辑上讲使用JavaScript和ActionScript的机制是一样的,但是引用的类的路径不同。请看以下的示例代码:
1.// Enter Fullscreen Interactive State
2.window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN_INTERACTIVE;
3.// Enter Standard Fullscreen State
4.window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.FULL_SCREEN;
5.// Enter Normal State
6.window.nativeWindow.stage.displayState = runtime.flash.display.StageDisplayState.NORMAL;
示例程序
这个示例程序展示了三种不同的显示模式。你可以注意到程序中的文本框只能在普通和全屏交互模式下使用。下面你可以下载这个程序的源码:

Sample Application
AIR File
Flex Application Code
Source Code
HTML / Javascript Application Code
Source Code
Tags: AIR, AIR教程
AIR允许你创建在线或离线状态下的应用,比如,你打算创建一个AIR工具来管理你的博客,那么你可能需要随时都可以写文章,而不用理睬网络是在线还是离线。要做到这一点,你的应用就要具备检测网络状态的能力,如果网络处于在线状态,就可以立刻发布你的文章到博客上,如果是离线状态,可以先保存文章的内容(可以使用文件存储或SQLite数据库)。
接下来,你将创建一个简单的AIR应用,这个应用拥有一个窗体,窗体内有三个元件:一个搜索的输入框,一个提交按钮,和一个显示网络状态的图片。如果一个用户在输入框中敲入了一些文字并点击了搜索按钮,这个应用将会打开你的浏览器并自动在Google进行检索,当然,如果你不能连接到互联网,搜索的按钮是被禁用的。

AIR有两个方法可以帮助你检测网络连接状态,URLMonitor [ Flex | Javascript ] 和SocketMonitor [ Flex | Javascript ]。这两个类都继承自ServiceMonitor Class [ Flex | Javascript ]。要检测你的网络状态你只需要遵循以下步骤即可:
1.建立一个你想要监测的URLRequest对象,你可以设置它的模式为“HEAD”来避免网页下载完毕才开始监测状态。
2.建立一个URLMonitor对象并指定到你要监测的URL上去。
3.为URLMonitor添加一个事件监听器来监测StatusEvent.STATUS事件并创建一个函数来接受事件。
4.设置如何开始你的URLMonitor监测。
如果对上面的内容不太明白,也不用担心,在下面的代码中你将看到详细的说明,完整的示例文件在最后的下载文档中。
开始编写示例
在这个示例中,你要创建一个初始化的函数,用来创建你的URLRequest对象和URLMonitor对象。如果你使用Flex,那么这个函数应该绑定到CreationComplete事件上,如果是HTML/JavaScript,你需要把这个函数指定给Body的Onload事件。
Flex
Actionscript:
-
import air.net.URLMonitor;
-
import flash.net.navigateToURL;
-
import flash.net.URLRequest;
-
// DEFINE The Variable that will hold the URLMonitor
-
private var monitor:URLMonitor;
-
private function init():void {
-
// URLRequest that the Monitor Will Check
-
var url:URLRequest = new URLRequest(“http://www.davidtucker.net/index.php”);
-
// Checks Only the Headers – Not the Full Page
-
url.method = “HEAD”;
-
// Create the URL Monitor and Pass it the URLRequest
-
monitor = new URLMonitor(url);
-
// Set the Interval (in ms) – 3000 = 3 Seconds
-
monitor.pollInterval = 3000;
-
// Create the Event Listener that Will Be Fired When Connection Changes
-
monitor.addEventListener(StatusEvent.STATUS,on_connection);
-
// Start the URLMonitor
-
monitor.start();
-
}
HTML/Javascript
JavaScript:
-
var monitor;
-
function onLoad() {
-
// URLRequest that the Monitor Will Check
-
var request = new air.URLRequest( “http://www.davidtucker.net/index.php” );
-
// Checks Only the Headers – Not the Full Page
-
request.method = “HEAD”;
-
// Create the URL Monitor and Pass it the URLRequest
-
monitor = new air.URLMonitor( request );
-
// Create the Event Listener that Will Be Fired When Connection Changes
-
monitor.addEventListener( air.StatusEvent.STATUS, doStatus );
-
// Start the URLMonitor
-
monitor.start();
- }
你可以发现,这两者并没有什么区别,甚至在JavaScript中调用AIR的函数比在Flex中更简单。
注意:如果你要在JavaScript中使用这个函数,必须确认你引入了AIRAliases.js和servicemonitor.swf这两个文件。如果缺少它们,这个函数将无法工作。你的函数可以在AIRAliases.js之外。在缺少servicemonitor.swf的情况下你将不能使用URLMonitor。
Flex Application
Source Code
HTML / Javascript Application
Source Code
Tags: AIR, AIR教程