2010-09-03 66 views
4

所以我创建了一个保存为自定义文件类型的Air应用程序。我在发布应用程序时设置了文件关联,当您双击文件时,它会打开应用程序。检测应用程序是否已通过文件打开的钩子是什么?显然,我需要检测这个,然后让应用程序打开文件本身。Adob​​e Air - 用空气打开文件

回答

4

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> 
+0

谢谢,这正是我一直在寻找的。 – hamishtaplin 2010-09-03 10:00:57

5

请收听WindowedApplication或其nativeApplicationinvoke事件。它有一个arguments数组属性,用于存放在此调用期间传递的字符串参数。

NativeApplication AIR应用程序的对象在调用应用程序时调度invoke事件。

NativeApplication对象总是在启动应用程序时调度一个invoke事件,但该事件也可能在其他时间调度。例如,当用户激活与应用程序关联的文件时,正在运行的应用程序会分派额外的InvokeEvent

只能启动特定应用程序的单个实例。随后尝试启动应用程序将导致运行实例的NativeApplication对象分派新的invoke事件。应用程序有责任处理此事件并采取适当的措施,例如打开新的应用程序窗口以在文件中显示数据。

InvokeEvent对象由NativeApplication对象(NativeApplication.nativeApplication)调度。要接收调用事件,请调用NativeApplication对象的addEventListener()方法。当一个事件监听器注册一个调用事件时,它也会收到注册之前发生的所有invoke事件。这些早期事件在addEventListener()返回后调度,但不一定在可能在注册后分派的新调用事件之前发送。因此,您不应该依赖调度顺序。

<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>