Adobe Air - 用空气打开文件

时间:2010-09-03 08:55:35

标签: flex flash actionscript-3 air

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

2 个答案:

答案 0 :(得分:5)

在[{3}}或其WindowedApplication上收听invoke事件。它有一个nativeApplication数组属性,用于保存在此​​调用期间传递的字符串参数。

  

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

     

NativeApplication对象始终在启动应用程序时调度invoke事件,但也可以在其他时间调度该事件。例如,当用户激活与应用程序关联的文件时,正在运行的应用程序将调度额外的InvokeEvent

     

只能启动特定应用程序的单个实例。启动应用程序的后续尝试将导致正在运行的实例的NativeApplication对象调度的新调用事件。应用程序负责处理此事件并采取适当的操作,例如打开新的应用程序窗口以在文件中显示数据。

     InvokeEvent对象(NativeApplication)调度

NativeApplication.nativeApplication个对象。要接收调用事件,请调用addEventListener()对象的NativeApplication方法。当事件侦听器注册调用事件时,它还将接收注册前发生的所有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>

答案 1 :(得分:4)

收听InvokeEvent,该{{3}}将保留所请求文件名的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>