繁体   English   中英

如何在as3 / flex mobile中的应用程序存储目录中打开新写入的文件?

[英]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));
                }

我从此侦听器获取以下信息

  • 文件已保存。
  • 存在? 真正
  • 网址:app-storage:/test.jpg
  • 路径:/data/data/air.com.xxxxx.apptesting.debug/com.xxxxx.apptesting.debug/本地存储/test.jpg

...而问题是,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM