Archive for the '网络技术-Adobe AIR' 类别

23

applicationDirectory // 当前 AIR 程序安装文件夹
applicationStorageDirectory // 当前 AIR 程序专属存储文件夹
desktopDirectory // 当前用户”桌面”文件夹
documentsDirectory // 当前用户”我的文档”文件夹

注意:applicationDirectory是只读的,如果需要读写,需要把文件拷贝到别的目录,比如applicationStorageDirectory

24

一般说来使用htmltext即可在文本中嵌入图片:
t_txt.htmlText = "<img src='images/lovely.jpg'>";

刚发现在AIR中不行,Adobe这么解释:
For AIR content in the application security sandbox, AIR ignores img tags in HTML content in ActionScript TextField objects. This is to prevent possible phishing attacks,

又是sandbox。。。

01

AIR通过HTTPService像服务器发送reques时,如果带有中文,那么需要设置:

flash.system.System.useCodePage=true

但同时需要注意,自此以后外部导入的xml的编码格式需要设置为gb2312:


15

代码颇简单:

import air.net.URLMonitor;
import flash.events.StatusEvent;
private var monitor:URLMonitor =new URLMonitor(new URLRequest("http://www.g.cn"));
private function checkNet():void{
monitor.addEventListener(StatusEvent.STATUS, showStatus);
monitor.start();
trace(monitor.available);
}
private function showStatus(evt:StatusEvent):void{
trace(monitor.available);
}

适用于flex sdk 3.x

29

与大多数情况不同,在用Loader类的时,不是让loader监听事件,而是loader.contentLoaderInfo属性,很奇怪吧?据说这是为了在内容还没有被加载的时候就获得被加载对象的属性:已加载尺寸,总尺寸,标称的宽和高,路径等。

那contentLoaderInfo和loaderInfo啥关系呢?其实loader的contentLoaderInfo属性是LoaderInfo类的一个实例。而LoaderInfo类是共享与Loader和被加载对象之间共享信息的类。

通过contentLoaderInfo添加下载侦听存在一个问题:加载文件有个时间延迟,在延迟的这段时间内可能已经开始加载别的文件了。所以在侦听到Event.COMPLETE事件的时候,并不知道到底是那个文件完成加载了。这时就需要通过contentLoaderInfof反向得到loader:
private function movieLoaded(evt:Event):void { trace(evt.target.loader.name); }

28

加入事件中要自带参数的话,那就需要自定义事件了。其实使用自定义事件是非常简单的,分成三个部分:

1.定义事件类
package { import flash.events.Event; public class ClickEvent extends Event { public static const ACTION:String = "Clicked"; public var cause:String; public function ClickEvent() { super(ACTION); } } }
其中super(ACTION);是唯一必须的构造函数,否则不能执行。cause是自定义的变量,可以用来传递参数。如果有必要可以用get和set来做更为复杂的处理。
补充:如果想让事件冒泡,则应该这么写-super(ACTION,true);

2.发送事件
clickEvent = new ClickEvent(); clickEvent.cause = "example"; dispatchEvent(clickEvent);

3.接收事件
navigation.addEventListener(ClickEvent.ACTION, clickHandler); private function clickHandler(evt:ClickEvent):void { trace("click event:"+evt.cause); }

19

经过长时间的努力,终于用Flash CS3+AS3+AIR Beta2做出了RSSReader 2.0。
前一段时间用html+JS做了个WordpressReader, 虽然实现了自动升级,等很cool的功能,但界面还是比较简朴。
AIR读取Blog RSS – Adobe AIR Beta2 实践
WordPressReader 1.1 完成

这次做的RSSReader是基于ActionScript3的,界面漂亮了很多,而且用户体验也有了显著的提高。
程序下载:http://www.adamstudio.cn/blog/download/RSSReader.air
初始介面:
初始页面
文章阅读界面:
文章阅读界面
实现的功能:
1 读取服务器端XML文档;
2 将读取的XML文档储存到AIR的内建本地数据库SQLite !!!(太酷了!)
3 判断网络连接状况,如果网络畅通就读取并以动画的形式展示文章标题,同时用最新文章刷新SQLite中已有文章。如果网络不通,则读取并显示SQLite中储存的文章;
4 以动画形式展示动画文章标题;
5 自定义事件和文章标题与文章内容之间的切换。
 
多说也无用,试用一下你就知道Adobe AIR有多强了!
程序下载:http://www.adamstudio.cn/blog/download/RSSReader.air

18

AS3中使用navigateToURL取代了getURL,个人感觉navigateToURL最大的好处就是方便了传递参数,不足的地方嘛,据说弹出的新窗口会被浏览器拦截。需要使用:ExternalInterface.call(“window.open”,winurl,”");来避免,但是这是采用了调用JS来做,是必须在浏览器支撑并且JS可以使用的情况下(没有测试)。
另外发现在Adobe AIR中使用navigateToURL打开连接时,只能在新窗口中打开(不会被浏览器拦截),”_self”,”_parent”,”_top”都没有用.而且都是调用浏览器,而不是在AIR中打开.

具体用法如下:
package { import flash.display.Sprite; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.net.URLVariables;

public class NavigateToURLExample extends Sprite {

public function NavigateToURLExample() {
var url:String = “http://www.adobe.com”;
var variables:URLVariables = new URLVariables();
variables.exampleSessionId = new Date().getTime();
variables.exampleUserLabel = “Your Name”;
var request:URLRequest = new URLRequest(url);
request.data = variables;
try {
navigateToURL(request);
}
catch (e:Error) {
// handle error here
}
}
}
}

12

以下转载自:http://www.kingda.org/archives/kingda/2007/09/air10.html

AIR的强项与弱点
强项:
1.较高的执行效率
Ajaxian:AS3和JIT(Just in time)编译器使AIR效率堪于Java或.NET匹敌。

2.跨平台

3.可简单方便将现有的Flex或HTML程序转换成AIR

4.便捷的安装。
黑羽按:在线的安装方式确实不错。

5.支持SQLite
黑羽按:这个小巧高效的本地数据库能满足大部分开发者对数据库的要求。

6.使用LiveCycle实现在线离线同步。

7.自由的极其丰富的设计资源和媒体资源。
黑羽:同志们兄弟们,这可是Flash啊,这个是绝对的强项。光是广大的Flash设计师就是不可多的强大资源。

8.使用Flex的声明式编程法对编写GUI和组件非常方便
黑羽按:即MXML语言的优势。

9.广大的网络服务网站有足够的动力去开探桌面市场。 如Ebay已经率先开发了相关的AIR。
黑羽按:在线离线同步技术对广大的网络服务网站确实有巨大的吸引力。可以隐隐听见AIR开发的浪潮临近的声音了。

10.缺乏软件部署标准。
AIR不能使用windows installer service。Adobe需要创建一个统一的标准。
黑羽按:不能所有的安装都是在线吧,统一的标准是需要的。

弱点:
1.有限的扩展性
Tim:AIR支持文件访问、剪贴板访问、多窗口、拖放和触发器,除了AIR本身支持的方式外,你将不能有其他选择。这样限制的一个原因是为了保持平台的统一性。这无可厚非,但最好允许我们不要总受到沙箱的严格限制,程序员需要一定的灵活性。与Java和.NET不同,我们无法编写自定义的原生代码库(native code libraries)来扩展AIR,也无法调用操作系统的API。

2.数据库的选择限制在了SQLite和Web services.

3.技术是私有的,不是开源的。
AIR程序必须依靠Adobe的运行时(Runtime)才能生存。
黑羽按:希望AIR的开源计划能够顺利进行。

4.安全。
这是目前Adobe和AIR开发人员下大力气的方面。拭目以待最终正式版会是什么样子吧,目前尚无定论。

5.不支持多线程

6.精神分裂症式的开发模型(Schizophrenic development model)
黑羽:哈哈,这是Tim Anderson提出的概念,大意是说为了让Flex和HTML两种开发方式都能顺利进行,必须要提供不同的SDK,甚至包括两套不同的虚拟机。黑羽认为,是有可能的,虽然下一代的Mozilla Javascirpt解释引擎基于AVM2,但这并不能保证AIR中使用一套AVM2就可以解决那数不胜数的小差别。

9.在线离线同步技术是Adobe私有的LiveCycle。
黑羽:呵呵,Adobe在AIR哪儿能赚到的第一桶金恐怕就直接从这儿来了,估计不会开源。
像我不关心FMS3,只关注开源Red 5一样,我继续期待第三方开源的东东出现。我只看好开源技术。

10.没有一套UI标准。

09

关于WordpressReader的制作,包源文件和成品文件的下载,在AIR读取Blog RSS – Adobe AIR Beta2 实践一文中已经详细罗列了.但有一个问题没有解决,那就是:
在Wordpress中,文章Rss是由”wp-rss2.php”产生的,我在IE中打开这一页(http://www.adamstudio.cn/blog/wp-rss2.php),然后察看源代码,把源代码直接存到”content.xml”中。”content.xml”上穿到服务器后,WordpressReader就可以很顺利的读取最新的RSS了。
但是如果直接去读取”wp-rss2.php”就会出错”TypeError: None value”。

今天很偶然地发现问题出在Wordpress的缓存插件WP-Cache上,只要不缓存wp-rss2.php这一页就可以了,哈哈!到此为止,WordpressReader就完全拥有了实用价值,只要打开它就可以看到blog中的最新文章,而不用再打开浏览器,输入网址。当然目前浏览器也带有Rss浏览和收藏的功能,但是用AIR来制作RSS聚合功能可以利用Flash的各种动画效果,可以实现更为丰富的交互体验.

安装文件下载: http://www.adamstudio.cn/blog/download/WordpressReader_1.1.air