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

时间:2014-09-22 06:35:47

标签: android actionscript-3 flex air flash-builder

我在开发应用程序(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/Local Store / test.jpg

...问题是navigateToURL无法访问存储文件的位置(协议在浏览器中显示为file:/// data / data / air.com / xxx ...)

如何使用navigateToURL访问Web浏览器中新创建的文件或设备与文件关联的任何本机应用程序(它的.JPG文件)?我也成功地将新创建的图像添加到相机胶卷,但无法弄清楚如何在原生相机胶卷中打开新保存的图像,或者设备选择或呈现给.jpg用户的任何应用程序。< / p>

我可以通过引用位图数据向用户显示我的应用程序中的图像,我只想让用户访问我在其设备上创建的物理文件。

我甚至成功地将位图数据发布(通过urlLoader)作为base64编码,然后在服务器端创建一个文件并加载该URL但是编码和往返服务器的行程为用户提供图像添加很多开销,需要花费太长时间,我想避免那个拉长的过程。

感谢任何人都能提供的帮助 - 如果我需要更具体的话,请告诉我。

4 个答案:

答案 0 :(得分:1)

解决了这个问题......我能够使用以下方法在documentsDirectory中存储/写入我的文件:

var targetFile : File = File.documentsDirectory.resolvePath('test.jpg');

然后

navigateToURL(new URLRequest(targetFile.url));

现在这很好用。希望它可以帮助别人!似乎存储目录应该工作,但到目前为止我只写入并读取存储在那里的文件...也许打开文件一个HAS将其复制到文件系统中的“安全”位置(即SD卡?) ...将继续在ios中进行测试现在 - 希望在该操作系统中一切正常。谢谢所有参与其中的人。

答案 1 :(得分:0)

我的第一个预感是您需要在应用程序描述符中指定正确的用户权限,以便您可以将openWith功能与应用程序中的内容一起使用。

请记住,您需要专门为IOS和Android指定此内容。

答案 2 :(得分:0)

在您的application.xml上,您需要在android&gt;中设置此权限。 manifestAdditions&gt;清单:

<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));

答案 3 :(得分:0)

使用Android或iOS时,applicationStorageDirectory只能由其所属的应用程序访问。 navigateToURL()将您的请求移交给默认浏览器,该浏览器无法访问该目录。

documentsDirectory是Android中的公共目录,但不是iOS中的公共目录。所以它不能用于这两个平台。遗憾的是,预编译的文件路径File都没有指向iOS中的公共目录。您可以找到一个表格,解释所有预编译路径here