我在开发应用程序(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));
}
我从这个监听器中得到以下信息
...问题是navigateToURL无法访问存储文件的位置(协议在浏览器中显示为file:/// data / data / air.com / xxx ...)
如何使用navigateToURL访问Web浏览器中新创建的文件或设备与文件关联的任何本机应用程序(它的.JPG文件)?我也成功地将新创建的图像添加到相机胶卷,但无法弄清楚如何在原生相机胶卷中打开新保存的图像,或者设备选择或呈现给.jpg用户的任何应用程序。< / p>
我可以通过引用位图数据向用户显示我的应用程序中的图像,我只想让用户访问我在其设备上创建的物理文件。
我甚至成功地将位图数据发布(通过urlLoader)作为base64编码,然后在服务器端创建一个文件并加载该URL但是编码和往返服务器的行程为用户提供图像添加很多开销,需要花费太长时间,我想避免那个拉长的过程。
感谢任何人都能提供的帮助 - 如果我需要更具体的话,请告诉我。
答案 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