2017-01-31 20 views
6

Я попытался проверить код на устройстве Android, но я не мог видеть никаких данных в текстовых полях. Этот код хорошо работает на AIR Desktop, но в Android нет. Разница между AIR FileStream функция на Рабочий стол и Android? Что лучше кросс-платформенный код для сохранения файлов и чтения записи?Проблема с файловым потоком Adobe AIR для Android

Этот код работает на Adobe Animate CC Android Emulator.

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 (Desktop, Android, IOS) для хранения пользовательских данных на устройстве/ПК, а также File.applicationStorageDirectory. Таким образом, ваш код является кросс-платформенным, если он не работает на Android, у вас, вероятно, есть еще одна проблема, но ваш код выглядит хорошо.

Для чтения/записи данных в File.applicationStorageDirectory вам также не нужны явные разрешения в манифесте приложения.

+0

Я выбрал все разрешения в настройках и скомпилировал снова. теперь это работает. –

+0

@MohammadSamir вам не нужны ** все разрешения **. Некоторые люди отключены приложением, которое необходимо [без необходимости] получить доступ ко всем (SD-карта, телефонные контакты, GPS и т. Д.), Попробуйте разрешить «читать/записывать в хранилище устройств», если ваш файл не является сохранено/загружено в 'File.applicationStorageDirectory' ... –

0

Если ваша версия Android 6.0 или более поздняя версия, вы должны запросить разрешения, такие как файлы или камеру во время выполнения.

Убедитесь в наличии AIR 24.0, с опцией компилятора -swf-версии = 35, и сделать что-то вроде:

вар permissionCheck: File = новый файл ("тест"));

    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

Надеется, что это помогает.