Adobe AIR Android 文件流问题
Adobe AIR Android FileStream issue
我试图在 Android 设备上测试打击代码,但我在文本字段中看不到任何数据。此代码在 AIR Desktop 上运行良好,但在 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();
这是正确的方法,我们将它用于 AIR 应用程序(桌面、Android、iOS)以在 device/PC、File.applicationStorageDirectory
上存储用户数据。所以你的代码是 cross-platform,如果它在 Android 上不起作用,你可能有其他问题,但你的代码看起来很好。
要 read/write 数据到 File.applicationStorageDirectory
您也不需要应用程序清单中的任何明确权限。
如果您的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
希望对您有所帮助。
我试图在 Android 设备上测试打击代码,但我在文本字段中看不到任何数据。此代码在 AIR Desktop 上运行良好,但在 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();
这是正确的方法,我们将它用于 AIR 应用程序(桌面、Android、iOS)以在 device/PC、File.applicationStorageDirectory
上存储用户数据。所以你的代码是 cross-platform,如果它在 Android 上不起作用,你可能有其他问题,但你的代码看起来很好。
要 read/write 数据到 File.applicationStorageDirectory
您也不需要应用程序清单中的任何明确权限。
如果您的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
希望对您有所帮助。