我创建了一个保存为自定义文件类型的Air应用程序。当我发布应用程序并设置文件关联时,双击文件会打开Air应用程序。有哪些钩子可以让我检测到应用程序是通过文件打开的?显然,我需要检测到这一点,然后让应用程序自己打开文件。
我创建了一个保存为自定义文件类型的Air应用程序。当我发布应用程序并设置文件关联时,双击文件会打开Air应用程序。有哪些钩子可以让我检测到应用程序是通过文件打开的?显然,我需要检测到这一点,然后让应用程序自己打开文件。
invoke
事件。它有一个 arguments 数组属性,其中包含在此调用期间传递的字符串参数。NativeApplication
对象会分派一个 invoke
事件。
NativeApplication
对象始终在启动应用程序时分派一个 invoke 事件,但也可能在其他时间分派该事件。例如,正在运行的应用程序在用户激活与应用程序相关联的文件时会分派另一个 InvokeEvent
。NativeApplication
对象分派新的 invoke 事件。处理此事件并采取适当的操作(例如打开新的应用程序窗口以显示文件中的数据)是应用程序的责任。
InvokeEvent
对象由 NativeApplication
对象(NativeApplication.nativeApplication
)分派。要接收 invoke 事件,请调用 NativeApplication
对象的 addEventListener()
方法。当事件侦听器注册为 invoke 事件时,它还将接收在注册之前发生的所有 invoke 事件。这些较早的事件在调用 addEventListener()
返回后分派,但不一定在注册后分派新的 invoke 事件之前。因此,您不应该依赖于分派顺序。<mx:WindowedApplication creationComplete="init()">
<mx:Script>
<![CDATA[
public function init():void
{
NativeApplication.nativeApplication.addEventListener(InvokeEvent.Invoke, onInvoke);
}
public function onInvoke(e:InvokeEvent):void
{
var args:Array = e.arguments;
trace("There are " + args.length + " arguments");
for(var i:int = 0; i < args.length; i++)
{
trace("Argument #" + i + " " + args[i]);
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
请监听InvokeEvent,它将保存在arguments
属性中所请求的文件名:
快速的mxml示例:
<?xml version="1.0"?>
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:s="spark.components.*"
invoke="onAppInvoke(event);">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function onAppInvoke(event:InvokeEvent):void {
if (event.arguments.length>0) {
// ok app call with an arguments
var fileName:String=event.arguments[0];
Alert.show("app open with : "+fileName);
} else {
// app open normally
Alert.show("normal launch");
}
}
]]></mx:Script>
</mx:WindowedApplication>