AIR程序的多开

来源:互联网 发布:单片机的flash和ram 编辑:程序博客网 时间:2024/06/07 01:44

AIR应用通常不能像QQ那样能进行多开操作。

 

为了让一个用AIR做的客户端能实现多任务,我找到得办法是运行程序时自动修改配置文件的id标签内的内容。

 

然后再关闭程序时又必须还原成原有的id,因为只有id一致才能实现更新功能。

 

 

主程序:multiapp.mxml

 

Js代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                        xmlns:s="library://ns.adobe.com/flex/spark"   
  4.                        xmlns:mx="library://ns.adobe.com/flex/mx"  
  5.                        creationComplete="windowedapplication1_creationCompleteHandler(event)">  
  6.     <fx:Script>  
  7.         <![CDATA[  
  8.             import flash.filesystem.File;  
  9.             import flash.filesystem.FileMode;  
  10.             import flash.filesystem.FileStream;  
  11.               
  12.             import mx.events.FlexEvent;  
  13.             import mx.formatters.DateFormatter;  
  14.               
  15.             private var oldid:String;  
  16.             private var reg:RegExp = /<id>.*<\/id>/;  
  17.               
  18.             protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void  
  19.             {  
  20.                 var df:DateFormatter = new DateFormatter();  
  21.                 df.formatString = "YYYYMMDDHHNNSS";  
  22.                 var time:String = df.format(new Date());  
  23.                 var newid:String = "<id>com.roy"+time+"</id>";  
  24.                   
  25.                 var f:File =new File(File.applicationDirectory.resolvePath(  
  26.                     "META-INF/AIR/application.xml").nativePath);  
  27.                 var fs:FileStream = new FileStream();    
  28.                 fs.open(f,FileMode.READ);        
  29.                 var str:String = new String(fs.readUTFBytes(fs.bytesAvailable));  
  30.                 oldid = str.match(reg).toString();  
  31.                 str = str.replace(reg,newid);    
  32.                 fs.open(f,FileMode.WRITE);  
  33.                 fs.writeUTFBytes(str);   
  34.                 fs.close();  
  35.                   
  36.                 label.text = newid;  
  37.                   
  38.                 //有多个在运行的程序时只关闭一个运行程序就无法再打开新程序  
  39.                 //必须监听系统最后一个相同程序关闭时,才能初始化id  
  40.                 //解决办法:  
  41.                 //记录运行前id,若为初始ID则在关闭该程序时初始化id,否则不操作  
  42.                   
  43.                 if(oldid == "<id>com.roy</id>")  
  44.                 {  
  45.                     this.addEventListener(Event.CLOSE,returnId);  
  46.                 }  
  47.             }  
  48.               
  49.             protected function returnId(e:Event):void  
  50.             {  
  51.                 var f:File =new File(File.applicationDirectory.resolvePath(  
  52.                     "META-INF/AIR/application.xml").nativePath);  
  53.                 var fs:FileStream = new FileStream();    
  54.                 fs.open(f,FileMode.READ);        
  55.                 var str:String = new String(fs.readUTFBytes(fs.bytesAvailable));  
  56.                 str = str.replace(reg,oldid);    
  57.                 fs.open(f,FileMode.WRITE);  
  58.                 fs.writeUTFBytes(str);   
  59.                 fs.close();  
  60.             }  
  61.               
  62.         ]]>  
  63.     </fx:Script>  
  64.       
  65.     <s:VGroup gap="20">  
  66.         <s:Label text="已将配置文件id更改为:" color="0xff0000" fontSize="20"/>  
  67.         <s:Label id="label" color="0x0000ff" fontSize="20"/>  
  68.     </s:VGroup>  
  69. </s:WindowedApplication>  

 

此程序中配置文件multiapp-app.mxml中,id标签必须为<id>com.roy</id>。

0 0