[英]Can I use as3 navigateToURL( ) to open a newly created JPG file in a flex mobile AIR documentsDirectory?
[英]how do I open a newly written file from application storage directory in as3 / flex mobile?
我正在开发一个应用程序(flex 4.12 sdk,使用flashbuilder 4.5,为ios和android创建一个应用程序,主要在一个android htc上进行测试)...并且正在使用相机捕获文件...我然后保存该图像到应用程序存储目录,我想在默认的Web浏览器中打开图像或触发本机对话框(Android用户)以选择他们选择的Web浏览器...如何打开它现在并不十分重要-我主要是试图通过设备“访问”它并将其“加载”到我的空中应用程序外...
这是我的代码:
var fs2 : FileStream = new FileStream();
fs2.addEventListener(Event.CLOSE, fileCompleteHandler);
var targetFile : File = File.applicationStorageDirectory.resolvePath("test.jpg");
fs2.openAsync(targetFile, FileMode.WRITE);
fs2.writeBytes(myBMDByteArray,0,myBMDByteArray.length);
fs2.close();
对于检测新创建文件关闭的事件侦听器:
function fileCompleteHandler(e:Event):void {
trace('File saved.');
trace('exists? ' + targetFile.exists);
trace('the url: ' + targetFile.url);
trace('path: ' + targetFile.nativePath);
navigateToURL(new URLRequest(targetFile.url));
}
我从此侦听器获取以下信息
...而问题是,NavigationToURL无法访问文件的存储位置(协议在浏览器中显示为file:/// data / data / air.com / xxx ...)
如何使用NavigationToURL在网络浏览器或设备与该文件关联的任何本机应用程序(其.JPG文件)中访问此新创建的文件? 我还成功地将新创建的图像添加到相机胶卷中,但无法弄清楚如何在本机相机胶卷中或设备选择或呈现给用户的.jpg格式的任何应用程序中打开该新保存的图像。
我可以通过精细地引用位图数据来向用户显示我应用内的图像,我只想授予用户访问Im在其设备上创建的物理文件的权限。
我什至已经成功地(通过urlLoader)将位图数据发布为base64编码,然后在服务器端创建了一个文件并加载了该url,但是编码和往返于服务器的往返旅行向用户提供了图像,这增加了很多开销,并且花费的时间太长,我想避免这种冗长的过程。
感谢任何人都能提供的帮助-如果我需要在这方面更具体一点,请告诉我。
解决了问题...我能够使用以下命令在documentDirectory中存储/写入文件:
var targetFile : File = File.documentsDirectory.resolvePath('test.jpg');
接着
navigateToURL(new URLRequest(targetFile.url));
现在可以正常工作了。 希望它可以帮助其他人! 似乎存储目录应该可以工作,但是到目前为止,我只写过文件并读取了存储在其中的文件...也许打开一个文件,然后将其复制到文件系统中的“安全”位置(即sd卡?) ...将继续在ios中进行测试-希望所有功能都能在该OS中正常运行。 谢谢所有对此感兴趣的人。
我的第一个直觉是您需要在应用程序描述符中指定适当的用户权限,以便可以将openWith功能与应用程序中的内容一起使用。
请记住,您需要专门针对IOS和Android进行指定。
在application.xml上,您需要在android> manifestAdditions> manifest中设置以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
拥有此权限,您可以将文件保存到applicationStorageDirectory:
const FILE_LOADER:URLLoader = new URLLoader();
FILE_LOADER.addEventListener(Event.COMPLETE, onTempFileComplete);
FILE_LOADER.dataFormat = URLLoaderDataFormat.BINARY;
FILE_LOADER.load(new URLRequest(BASE_URL + filePath));
使用Android或iOS时, applicationStorageDirectory
也只能由其所属的应用程序访问。 navigateToURL()
将您的请求移交给默认浏览器,该浏览器无法访问该目录。
documentsDirectory
是Android中的公共目录,但不是iOS中的公共目录。 因此,不能同时在两个平台上使用。 遗憾的是没有预编译的文件路径的File
已经点到iOS的公共目录。 您可以在此处找到解释所有预编译路径的表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.