我想弄清楚如何下载图像并将其显示在 Blackberry 上的 phonegap 应用程序中(对于 iOS 和 Android,我已经设法这样做了)。作为测试,我使用了下面附上的西蒙示例。
如果我使用 WebWorks 方法在 playbook 上运行示例,它可以模拟运行而没有任何错误(WebInspector 中未报告),但不显示图像。虽然文件传输 sims 成功并且报告的 entry.fullPath 是 file:///accounts/1000/appdata/....../data//doubt.jpg 访问此路径上的文件有问题。查看“网络”选项卡 (WebInspector) 中的请求,它显示在本地图像路径请求的文件大小仅为 15B。看起来这是我们调用 fileSystem.root.getFile 时创建的空文件,而不是从服务器传输时应该保存在此路径中的文件。
我现在试图解决这个问题几天,没有成功,只有沮丧。我找到了使用 blackberry.io.home 的 blackberry.io.sharedFolder 来声明应该保存文件的路径的建议,但是虽然我有 blackberry 对象,但 blackberry.io.sharedFolder 和 home 是未定义的。
我也在 Blackberry z10 上使用 NDK 方法尝试了相同的示例,但在这种情况下 entry.fullPath 是 local:///persistent/.. 但是无法从此路径访问文件(报告 GET 错误)。在这种情况下也没有可用的黑莓对象。
所以我认为基本问题是应该为文件下载设置什么本地路径,以便文件可以通过 URI 访问。
<!DOCTYPE HTML>
<html>
<head>
<meta name = "viewport" content = "user-scalable=no,width=device-width" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Test Page</title>
<style type="text/css">
* {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
</style>
<script src="cordova/cordova.BBplaybook.js"></script>
<script type="text/javascript" charset="utf-8">
function init(){
document.addEventListener("deviceready", ready, true);
}
function ready() {
}
function download() {
console.log("calling download");
// // blackberry.io.sandbox = false;
// console.log("blackberry.io.sharedFolder");
// console.log(blackberry.io.sharedFolder);
// console.log("blackberry");
// console.log(blackberry);
var remoteFile = "http://i3.kym-cdn.com/entries/icons/original/000/000/080/doubt.jpg";
var localFileName = remoteFile.substring(remoteFile.lastIndexOf('/')+1);
console.log("localFileName");
console.log(localFileName);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(localFileName, {create: true, exclusive: false}, function(fileEntry) {
var localPath = fileEntry.fullPath;
console.log("localPath");
console.log(localPath);
if (device.platform === "Android" && localPath.indexOf("file://") === 0) {
localPath = localPath.substring(7);
}
var ft = new FileTransfer();
ft.download(remoteFile,
localPath, function(entry) {
var dwnldImg = document.getElementById("dwnldImg");
dwnldImg.src = entry.fullPath;
console.log("entry.fullPath;");
console.log(entry.fullPath);
dwnldImg.style.visibility = "visible";
dwnldImg.style.display = "block";
}, fail);
}, fail);
}, fail);
}
function fail(error) {
console.log("error");
console.log(error);
console.log(error.code);
}
</script>
</head>
<body onload="init();">
<button onclick="download()" >Download and display image</button>
<img src="" id="dwnldImg" style="display: none"/>
</body>
</html>
在 config.xml 我有
<access subdomains="true" uri="*" />
<feature id="blackberry.io.file" required="true" version="1.0.0.0" />
<feature id="blackberry.utils" required="true" version="1.0.0.0" />
<feature id="blackberry.io.dir" required="true" version="1.0.0.0" />
<rim:permit>access_shared</rim:permit>
和 plugins.xml
<plugin name="File" value="org.apache.cordova.file.FileManager"/>
<plugin name="FileTransfer" value="org.apache.cordova.http.FileTransfer"/>