2017-01-31 33 views
6

我試圖在Android設備上測試打擊代碼,但我無法在文本字段中看到任何數據。此代碼適用於AIR桌面,但在Android沒有。是否有區別AIR FileStream功能桌面Android?什麼是最好的跨平臺代碼保存文件和讀寫?Adob​​e AIR Android FileStream問題

此代碼適用於Adobe Animate CC Android 仿真器

import flash.filesystem.*; 

      var prefsFile:File; 
      [Bindable] var prefsXML:XML; 
      var stream:FileStream; 

      function appStart():void 
      { 
       prefsFile = File.applicationStorageDirectory; 
       prefsFile = prefsFile.resolvePath("preferences.xml"); 
       readXML(); 
      } 


      function readXML():void 
      { 
       stream = new FileStream(); 
       if (prefsFile.exists) { 
        stream.open(prefsFile, FileMode.READ); 
        processXMLData(); 
       } 
       else 
       { 
        saveData(); 
       } 

      } 


      function processXMLData():void 
      { 
       prefsXML = XML(stream.readUTFBytes(stream.bytesAvailable)); 
       stream.close(); 
       trace(prefsXML.Data1); 
       trace(prefsXML.Data2); 
       trace(prefsXML.Data3); 
       txt_D1.text = prefsXML.Data1; 
       txt_D2.text = prefsXML.Data2; 
       txt_D3.text = prefsXML.Data3; 

      } 


      function windowClosingHandler(event:Event):void 
      { 
       saveData(); 
      } 


      function saveData():void 
      { 
       createXMLData(); 
       writeXMLData(); 
      } 


      function createXMLData():void 
      { 
       prefsXML = <preferences/>; 
       prefsXML.Data1 = 1; 
       prefsXML.Data2 = 2; 
       prefsXML.Data3 = 3; 
      } 


      function writeXMLData():void 
      { 
       var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n'; 
       outputString += prefsXML.toXMLString(); 
       outputString = outputString.replace(/\n/g, File.lineEnding); 
       stream = new FileStream(); 
       stream.open(prefsFile, FileMode.WRITE); 
       stream.writeUTFBytes(outputString); 
       stream.close(); 
      } 

appStart(); 

回答

4

這是正確的方法,我們使用它的AIR應用程序(桌面,安卓,iOS版)用戶的數據存儲設備/ PC,File.applicationStorageDirectory上也是如此。所以你的代碼是跨平臺的,如果它不適用於Android,你可能有其他問題,但是你的代碼看起來很好。

要讀取/寫入數據到File.applicationStorageDirectory您也不需要任何明確的應用程序清單權限。

+0

我在設置中選擇了所有權限並重新編譯。現在它工作。 –

+0

@MohammadSamir你不需要**所有權限**。有些人被需要[不必要]訪問所有內容的應用程序關閉(SD卡,手機通訊錄,GPS等...爲什麼?),嘗試允許「讀/寫設備存儲」,如果文件不是保存/加載到'File.applicationStorageDirectory'內... –

0

如果您的Android版本是6.0或更新的版本,您需要在運行時請求權限,如文件或相機。

確保您有AIR 24.0,與編譯器選項-swf版本= 35,而這樣做:

VAR的PermissionCheck:文件=新的文件( 「測試」));

    permissionCheck.addEventListener(PermissionEvent.PERMISSION_STATUS , function permissionStatusHandler(e : PermissionEvent) :void 
        {       
         permissionCheck.removeEventListener(PermissionEvent.PERMISSION_STATUS , permissionStatusHandler); 
         if(e.status == PermissionStatus.GRANTED) 
         {        
          // save your file 
         } 
         else 
         { 
          showPermissionError(); 
         } 

        }); 

        try 
        { 
         permissionCheck.requestPermission(); 

        } 
        catch(error : Error) 
        { 

        } 

有關更多信息(如處理相機權限),請參閱AIR發行說明。

https://helpx.adobe.com/flash-player/release-note/fp_24_air_24_release_notes.html

希望這有助於。