Adobe AIR Android FileStream issue



我试图在Android设备上测试打击代码,但我在文本字段中看不到任何数据。此代码在AIR桌面上运行良好,但在Android中不行。桌面版和安卓版上的 AIR FileStream 功能有什么区别吗?保存文件和读写的最佳跨平台代码是什么?

此代码适用于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();

这是正确的方法,我们将其用于AIR应用程序(桌面,Android,iOS)以将用户数据存储在设备/PC上,File.applicationStorageDirectory也是如此。所以你的代码是跨平台的,如果它不能在Android上运行,你可能有其他问题,但你的代码看起来不错。

若要将数据读/写到File.applicationStorageDirectory也不需要应用清单中的任何显式权限。

如果您的 Android 版本是 6.0 或更高版本,则需要在运行时请求文件或相机等权限。

确保您有 AIR 24.0 ,编译器选项 -swf-version=35,并执行以下操作:

var 权限检查 : 文件 = 新文件( "测试") );

                    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

希望这有帮助。

最新更新