1

AndroidとiOSで正しく動作するアプリがありますが、現在、BlackBerry(OS 6.0以降)では失敗します。アプリは3つのフレーバーすべてで動作していましたが、更新を動的にダウンロードするようにアプリを変換するため(Javascriptに小さな変更が加えられるたびにアプリを再公開するのではなく)、アプリはgetDirectory関数を通過できません。Cordova1.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 ='persistent' 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

あなたのコードは私には正しいように見えます。

BlackBerryをUSBに接続し、「USBドライブ」画面でプロンプトが表示されたときにデバイスのパスワードを入力した場合は、「マスメディア/ストレージモード」が有効になっているはずです。これにより、ファイルシステムがUSBにロックされ、アプリがUSBにアクセスできなくなります。fileSystem.root.getDirectoryを呼び出そうとすると、エラーが表示されると思います。

于 2012-08-21T17:36:53.123 に答える
2

これもとても楽しかったです。このエラーが発生する理由はいくつかあると思います。

しかし、私にとっては、USBケーブルが接続されているときにローカルストレージとSDカードへのアクセスを奪うのはBlackberryでした。開発時にはあまり役に立たず、いくつかの意味のあるエラーコードがBBに役立ちました!

これが他の誰かを助けることを願っています。

于 2013-06-05T15:52:19.123 に答える
1

blackberry10の場合、Cordova/WebWorksはこれを試してください。

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

コルドバの実装の代わりに:

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

それは私にとってはうまくいきました、そして今私はブラックベリー/その他のために上記のいずれかをトリガーする条件を持っています。うまくいけば、それは私と同じようにあなたたちのために働くでしょう。

乾杯

于 2013-12-19T07:08:47.820 に答える