Adobe Air - 使用 Air 打开文件

Posted

技术标签:

【中文标题】Adobe Air - 使用 Air 打开文件【英文标题】:Adobe Air - Opening a File With Air 【发布时间】:2011-04-07 18:00:26 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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>

【讨论】:

【参考方案2】:

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

【讨论】:

谢谢,这正是我想要的。

以上是关于Adobe Air - 使用 Air 打开文件的主要内容,如果未能解决你的问题,请参考以下文章

flash as3 和 adobe air -- 保存绘图文件,之后可以撤消/重做

Adobe Air - 自签名证书

Adobe AIR、URLRequest 和本地端口

Adobe AIR - 带有图像的自定义预加载器

Adobe Air .air文件:是32位,64位还是都不是?

反编译Adobe AIR应用程序