1

我有一个可以在 Android 和 iOS 上正常运行的应用程序,但目前在 BlackBerry (OS 6.0+) 上失败。该应用程序过去适用于所有 3 种风格,但由于将应用程序转换为动态下载更新(而不是每次对某些 Javascript 进行微小更改时重新发布应用程序),该应用程序无法通过 getDirectory 函数。我正在使用 Cordova 1.8.1。

这是设备准备就绪时执行的 JavaScript 代码的开头部分:

function onDeviceReady(){
    // get the filesystem setup and run the pre-loader (follow the callback road)
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail_FS);
}

function gotFS(fileSystem) {
   fileSystem.root.getDirectory("data", {create: true}, gotDir, fail_GD);   
}

function gotDir(dir) {
    console.log("got dir");
    DATADIR = dir;
    // code for downloading/updating files goes here
    // left out for brevity and lack of relevance at this point
}

function fail_FS(error){
    fail(error,'requestFileSystem');
}

function fail_GD(error){
    fail(error,'getDirectory');
}

function fail(error,call){
    console.log("ERROR: "+call);
    console.log(JSON.stringify(error));
}

我从 getDirectory 调用(GotFS 函数)中得到错误代码 1。我添加了额外的评论来测试。这是我所知道的:

fileSystem = '持久' fileSystem.root.name = "" fileSystem.root.fullPath = 'file:///store'

我在这里这里检查了关于 Cordova 的文档,这里是我在 config.xml 中的内容

<feature id="blackberry.system" required="true" version="1.0.0.0" />
<feature id="org.apache.cordova" required="true" version="1.0.0" />
<feature id="blackberry.find" required="true" version="1.0.0.0" />
<feature id="blackberry.identity" required="true" version="1.0.0.0" />
<feature id="blackberry.pim.Address" required="true" version="1.0.0.0" />
<feature id="blackberry.pim.Contact" required="true" version="1.0.0.0" />
<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" />
<feature id="blackberry.app" required="true" version="1.0.0.0" />
<feature id="blackberry.app.event" required="true" version="1.0.0.0" />
<feature id="blackberry.system.event" required="true" version="1.0.0.0"/>
<feature id="blackberry.widgetcache" required="true" version="1.0.0.0"/>
<feature id="blackberry.media.camera" />
<feature id="blackberry.invoke" />
<feature id="blackberry.invoke.BrowserArguments" />
<feature id="blackberry.identity" />
<feature id="blackberry.ui.dialog" />
<feature id="blackberry.system" />

<access subdomains="true" uri="file:///store" />
<access subdomains="true" uri="file:///store/data" />
<access subdomains="true" uri="file:///SDCard" />
<access subdomains="true" uri="*" />
<rim:permissions>
    <rim:permit>use_camera</rim:permit>
    <rim:permit>read_device_identifying_information</rim:permit>
    <rim:permit>access_shared</rim:permit>
    <rim:permit>read_geolocation</rim:permit>
</rim:permissions>

在其他信息中......这是我的 plugins.xml 中的内容:

<plugins>
  <plugin name="App"            value="org.apache.cordova.app.App"/>
  <plugin name="Device"         value="org.apache.cordova.device.Device"/>
  <plugin name="Camera"         value="org.apache.cordova.camera.Camera"/>
  <plugin name="NetworkStatus"  value="org.apache.cordova.network.Network"/>
  <plugin name="Notification"   value="org.apache.cordova.notification.Notification"/>
  <plugin name="Accelerometer"  value="org.apache.cordova.accelerometer.Accelerometer"/>
  <plugin name="Geolocation"    value="org.apache.cordova.geolocation.Geolocation"/>
  <plugin name="File"           value="org.apache.cordova.file.FileManager"/>
  <plugin name="FileTransfer"   value="org.apache.cordova.http.FileTransfer"/>
  <plugin name="Contacts"       value="org.apache.cordova.pim.Contact"/>
  <plugin name="Capture"        value="org.apache.cordova.capture.MediaCapture"/>
  <plugin name="Battery"        value="org.apache.cordova.battery.Battery"/>
  <plugin name="Media"          value="org.apache.cordova.media.Media"/>
  <plugin name="ChildBrowser"   value="org.apache.cordova.plugins.childbrowser.ChildBrowser"/>
</plugins>

我怀疑这只是一个简单的问题(就像我在 xml 中的访问权限做错了什么),但是在尝试了各种不同的事情并在整个互联网上搜索之后,我被难住了......

任何帮助,将不胜感激。

4

3 回答 3

2

我也玩得很开心。我确信发生此错误的原因有很多。

然而,对我来说,当连接 USB 电缆时,黑莓剥夺了对本地存储和 SD 卡的访问权限。开发时不太有用,一些有意义的错误代码会对 BB 有所帮助!

希望这可以帮助其他人。

于 2013-06-05T15:52:19.123 回答
2

你的代码对我来说看起来是正确的。

如果您将 BlackBerry 连接到 USB 并在“USB 驱动器”屏幕提示时输入设备密码,则您将启用“大众媒体/存储模式”。这会将文件系统锁定到 USB 并阻止您的应用程序访问它。我希望您在尝试调用 fileSystem.root.getDirectory 时会看到错误。

于 2012-08-21T17:36:53.123 回答
1

对于 blackberry10,Cordova / WebWorks 可以试试这个:

window.webkitRequestFileSystem(window.PERSISTENT, 5*1024*1024, onSuccess, null);

而不是 Cordova 的实现:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 5*1024*1024, onSuccess, null);

这对我有用,现在我有条件为黑莓/其他触发上述任何一个。希望它对你们有用,就像对我一样。

干杯

于 2013-12-19T07:08:47.820 回答