【问题标题】:Adobe AIR Android FileStream issueAdobe AIR Android FileStream 问题
【发布时间】:2017-06-16 18:55:04
【问题描述】:

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

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

【问题讨论】:

    标签: actionscript-3 flash flash-builder animate-cc


    【解决方案1】:

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

    要读取/写入数据到File.applicationStorageDirectory,您也不需要应用清单中的任何明确权限。

    【讨论】:

    • 我在设置中选择了所有权限并再次编译。现在可以了。
    • @MohammadSamir 您不需要所有权限。有些人被需要 [不必要] 访问所有内容(SD 卡、电话联系人、GPS 等... 987654324@...
    【解决方案2】:

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

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

    var permissionCheck : File = new File("test"));

                        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

    希望这会有所帮助。

    【讨论】:

    • johnny2hats,你能补充一下你的答案吗?您提供的内容确实有效,但它适用于 File,它确实具有 requestPermission() 方法。最初的问题是关于 FileStream,并且没有 requestPermission()。在 Android 6 下如何获得使用 FileStream 的权限?
    猜你喜欢
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多