RichBox-富盒子工作室
专业的RIA解决方案实现团队,承接Flash/Flex/ActionScript3/AIR/HTML5/CSS项目

感谢互联网有什么多热心人。有了这个还是很方便的。

点击图片查看详情

原文地址在这里


Tags:

在25日的RIAMeeting聚会上,来自Adobe的Ryan为我们带来了一些关于AIR的新消息:

1.大致在6月份,AIR将会发布1.1版,修正之前的许多Bug

2.AIR1.1将支持中文本地化(安装界面),除此之外,不会有其它方面的重大变动

3.这一点不是AIR的,是关于Flash10,预计再过6个月左右,Flash Player 10会有正式版,Flash10(Flash CS4)可能也会同时推出


Tags: ,

来源: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:

  1. <mx:WindowedApplication

  2. xmlns:mx=“http://www.adobe.com/2006/mxml”

  3. layout=“vertical”

  4. invoke=“onInvoke(event)”>

  5. </mx:WindowedApplication>

ACTIONSCRIPT:

  1. NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);

JAVASCRIPT:

  1. 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 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:

  1. <!– Whether the application can be launched when the user clicks a link in a web browser.

  2. Optional. Default false. –>

  3. <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:

  1. _loader = new Loader();

  2. var loaderContext:LoaderContext = new LoaderContext();

  3. loaderContext.applicationDomain = ApplicationDomain.currentDomain;

  4. _loader.contentLoaderInfo.addEventListener(Event.INIT, onInit);

  5. try {

  6. _loader.load(new URLRequest(BROWSERAPI_URL_BASE + “/air.swf”), loaderContext);

  7. } catch (e:Error) {

  8. root.statusMessage.text = e.message;

  9. }

Adobe AIR SDK包含了检测AIR是否已经安装的代码。我们可以修改这个,以便我们可以在自定义的应用中显示状态信息。

ACTIONSCRIPT:

  1. private function onInit(e:Event):void {

  2. _air = e.target.content;

  3. switch (_air.getStatus()) {

  4. case “installed” :

  5. statusMessage.text = “AIR is installed and has been detected.”

  6. stage.addEventListener(MouseEvent.CLICK,onButtonClicked);

  7. break;

  8. case “available” :

  9. // AIR is Available

  10. statusMessage.text = “AIR is not installed – application cannot be launched.”

  11. break;

  12. case “unavailable” :

  13. // AIR Not Available

  14. statusMessage.text = “AIR is not installed – application cannot be launched.”

  15. break;

  16. }

  17. }

你可以很容易的扩展这个示例,在AIR未安装的时候去安装它(这样对你的应用非常有益处),但是在这个教程中,我们只是实现在已经安装的情况下,去运行一个AIR应用。示例代码4标明了如何使用installApplication标签来运行一个应用。

ACTIONSCRIPT:

  1. private function onButtonClicked(e:Event):void {

  2. statusMessage.text = “Attempting to Launch AIR Application”;

  3. _air.launchApplication(_applicationID,_publisherID,_arguments);

  4. }

在网页上插入这个运行管理器

示例代码5展示了如何插入这个运行管理器到网页中去(使用SWFObject)。所有的参数都通过浏览器API传递到了管理器中,其实是使用了FlashVars方法,在SWFObject中,使用的是so.addVariable标签。

在这个示例中,我把applicationID和publisherID使用FlashVars传递到了电影中,但是你或许不希望所有这些信息都被显示出来。在这里,你还是努力把这些代码敲入你的电影中吧。

JAVASCRIPT:

  1. var so = new SWFObject(“launchMovie.swf”, “badge”, “250″, “75″, “9.0.115″, “#FFFFFF”);

  2. so.addVariable( “applicationID”, “net.davidtucker.airtips.BrowserAPITest” );

  3. so.addVariable( “publisherID”, “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.1″ );

  4. so.addVariable( “arguments”, “Application Launched from Browser,Argument 2″ );

  5. 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: ,

看图:


Tags:

来源: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:

  1. private var _messageColor: String;

  2. private var _buttonColor: String;

  3. private var _imageURL: String;

  4. private var _appURL: String;

  5. private var _appName: String;

  6. private var _airVersion: String;

  7. private var _arguments: Array;

2.然后,你需要把参数分配到SWF文件中的_arguments属性。这个步骤是在构造函数中完成的。你需要把传递的字符串参数用Split转换为数组。你可以使用String类提供的Split标签来完成这个功能。在这个例子里,你可以用逗号作为数组的分隔符。

ACTIONSCRIPT:

  1. _imageURL = validateURL(parameters["imageurl"]);

  2. _airVersion = String(parameters["airversion"]);

  3. _appURL = validateURL(parameters["appurl"]);

  4. _arguments = String(parameters["arguments"]).split(“,”);

3.最后,你需要把_arguments作为第三个参数传递给_air.installApplication标签。这个标签在onButtonClicked函数中被调用了两次,你需要同时更新它们两个。

ACTIONSCRIPT:

  1. _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:

  1. // AIR Application Arguments

  2. var airApplicationArguments = “First Argument,Second Argument”;

设置你的AIR应用

这是两个为了让你的AIR应用可以接受BrowserInvokeEvents事件所必须做的两个设置。首先,你需要修改你的AIR配置文件,以允许它接受这些事件。确保allowBrowserInvocation这个属性在你的XML配置文件中设置为True。

XML:

  1. <!– Whether the application can be launched when the user clicks a link in a web browser.

  2. Optional. Default false. –>

  3. <allowBrowserInvocation>true</allowBrowserInvocation>

其次,你需要告诉你的AIR应用去监听这些事件,如下所示:

ACTIONSCRIPT:

  1. import flash.events.BrowserInvokeEvent;

  2. private function init():void {

  3. NativeApplication.nativeApplication.addEventListener(BrowserInvokeEvent.BROWSER_INVOKE,onBrowserInvoke);

  4. }

  5. private function onBrowserInvoke(e:BrowserInvokeEvent):void {

  6. // Code to React to BrowserInvokeEvent

  7. }

示例程序

这个示例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: ,

原文地址:

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 Tip 4: Calling a SOAP Webservice

这些日子,关于如何让单独的应用程序从互联网的不同位置获取数据成了一个普遍的话题。这是可以让AIR成为一个伟大的应用平台的特性中的一个。

在开始之前,我们需要创建一个非常简单的Coldfusion组件。这个组件包含了一个函数”getStuff”。如果你输入了你的名字,它就会返回一个字符串“你的姓名是…”。如果你把它放在你的网站上的某一个地方,就可以通过在文件名后添加”?wsdl”把它发布为一个webservice。这就是你把一个Coldfusion组件转换成一个SOAP协议的Webservice的所有步骤。

参考:Coldfusion 8 and Web Services

注意:我计划写一篇关于如何在JavaScript中使用Consuming Coldfusion Webservices的文章。这篇文章只是提到了这方面的一些基础。

Coldfusion:

  1. <cfcomponent>

  2. <cffunction name=“getStuff” access=“remote” returnType=“String”>

  3. <cfargument name=“personName” required=“true” type=“string” />

  4. <cfreturn “Your Name is “ & personName />

  5. </cffunction>

  6. </cfcomponent>

呼叫一个Webservice,在Flex和Javascript中是完全不同的方法。在Flex中,你只需要简单的使用标签即可。在标签中你可以定义”操作”来和Webservice关联。在这个示例中,我们将定义一个”getStuff”作为其中一个操作。我们将添加一个”onResult”函数到操作的返回事件上。这个处理返回的函数只是简单的将返回结果赋值给场景中的一个文本标签。

mxml:

  1. <!–

  2. WEB SERVICES

  3. –>

  4. <mx:WebService

  5. id=“sampleService”

  6. wsdl=“http://yourDomain/SoapTest.cfc?wsdl”>

  7. <mx :o peration name=“getStuff” result=“onResult(event)” />

  8. </mx:WebService>

Actionscript:

  1. import mx.rpc.events.ResultEvent;

  2. private function callService(e:MouseEvent):void {

  3. sampleService.getStuff.send(myName.text);

  4. }

  5. private function onResult(e:ResultEvent):void {

  6. resultLabel.text = e.result as String;

  7. }

在JavaScript中,我们需要使用XMLHTTPRequest对象,就像我们在最后一个Tip所做的。基本上,我们将要添加一对自定义的Header,来传输SOAP数据包。

你可以参考”wsdl”文件来了解SOAP数据包。要参照wsdl文件,你只需在你的浏览器中敲入webservice文件的地址并加上”?wsdl”的后缀即可。wsdl描述了你的Webservice的细节。

参考资料:WSDL Tutorial

  1. var xmlhttp;

  2. var appXML;

  3. function callService() {

  4. var myName = document.getElementById(“myName”).value;

  5. var url = “http://yourDomain/SoapTest.cfc?wsdl”;

  6. xmlhttp = new XMLHttpRequest();

  7. xmlhttp.open(“POST”, url, true);

  8. xmlhttp.onreadystatechange=function(){

  9. if (xmlhttp.readyState==4) {

  10. var mainDiv = document.getElementById(‘result’);

  11. mainDiv.innerHTML = xmlhttp.responseText;

  12. }

  13. }

  14. xmlhttp.setRequestHeader(“Content-Type”, “text/xml”);

  15. xmlhttp.setRequestHeader(‘SOAPAction’,‘http://yourDomain/SoapTest.cfc?wsdl’);

  16. xmlhttp.send(“<?xml version=’1.0′ encoding=’UTF-8′?>”+\n\n+

  17. ‘<soapenv:Envelope’+

  18. ‘ xmlns:soapenv=”http://schemas.xmlsoap.org/soap/envelope/”‘+

  19. ‘ xmlns:xsd=”http://www.w3.org/2001/XMLSchema”‘+

  20. ‘ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>’+

  21. ‘<soapenv:Body>’+

  22. ‘<ns1:getStuff xmlns:ns1=”http://communications”‘+

  23. ‘ soapenv:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/”>’+

  24. ‘<personName xsi:type=”xsd:string”>’ + myName + ‘</personName>’+

  25. ‘</ns1:getStuff>’+

  26. ‘</soapenv:Body>’+

  27. ‘</soapenv:Envelope>’);

  28. }

对于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文件 | 源码


Tags:

来源: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示例:

使用这些代码,我们就能获取应用程序描述文件的引用了:

  1. private var airApplicationID:String = “”;

  2. private var airApplicationVersion:String = “”;

  3. private var airApplicationName:String = “”;

  4. private function getApplicationInformation():void {

  5. // Get the Application Descriptor File
  6. var appXML:XML = NativeApplication.nativeApplication.applicationDescriptor;
  7. // Define the Namespace (there is only one by default in the application descriptor file)
  8. var air:Namespace = appXML.namespaceDeclarations()[0];

  9. // Use E4X To Extract the Needed Information

  10. this.airApplicationID = appXML.air::id;

  11. this.airApplicationVersion = appXML.air::version;

  12. this.airApplicationName = appXML.air::name;

  13. // Retrieve any additional information from the application descriptor file

  14. }

这个示例定义了3个变量:名称,程序ID,和版本号。使用E4X,你可以从应用程序描述文件中获取应用的每一个属性的值。当然在E4X中,在你告诉它使用哪个命名空间之前,没有一个值会被返回。namespaceDeclarations标签返回了一个包含XML对象所有命名空间的数组。通常情况下,应用程序描述文件只有一个独立的命名空间。通过使用这种方式定义命名空间,你就可以保证这个标签也可以很好的工作在未来的AIR版本中(除非AIR的API更改了)。

JavaScript示例:

在这个JavaScript示例中,使用方法只有微小的改变。应用程序描述文件要引用自NativeApplication类,但是JavaScript认为返回的值是字符串(并不是XML)。你必须首先创建一个DOM Parser对象并传递给它XML值。这样你就可以从XML中获得返回值。

  1. var airApplication = {};

  2. function getVersion() {

  3. // Get Application Descriptor File

  4. var appXML = air.NativeApplication.nativeApplication.applicationDescriptor;

  5. // Parse the Application Descriptor File as XML

  6. var xmlObject = (new DOMParser()).parseFromString(appXML, “text/xml”);

  7. // Get the Needed Values from the XML

  8. airApplication.version = xmlObject.getElementsByTagName(‘version’)[0].firstChild.nodeValue;

  9. airApplication.applicationID = xmlObject.getElementsByTagName(‘id’)[0].firstChild.nodeValue;

  10. airApplication.name = xmlObject.getElementsByTagName(‘name’)[0].firstChild.nodeValue;

  11. }

下面的示例代码中说明了如何创建一个可以重新获取这些信息的AIR应用程序。当然这只是一个示例(不是一个真实的应用),所以不提供AIR文件的下载。

Flex Application
Source Code

JavaScript Application
Source Code


Tags: ,

Powered by Wordpress
Theme © 2005 - 2009 FrederikM.de
BlueMod is a modification of the blueblog_DE Theme by Oliver Wunder