Adobe AIR Android FileStream 问题
Posted
技术标签:
【中文标题】Adobe AIR Android FileStream 问题【英文标题】:Adobe AIR Android FileStream issue 【发布时间】:2017-06-16 18:55:04 【问题描述】:我尝试在 Android 设备上测试打击代码,但在文本字段中看不到任何数据。此代码在 AIR 桌面 上运行良好,但在 Android 上不行。 Desktop 和 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();
【问题讨论】:
【参考方案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 的权限?以上是关于Adobe AIR Android FileStream 问题的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 适用于Android的Adobe Air文件配置
Adobe AIR 3.0自带运行时兼容什么版本的Android和iOS?
Adobe ANE 适用于 iOS 和 Android 设备,但不适用于 AIR 模拟器