2012-08-03 60 views
1

我有一個在Android和iOS上正常工作的應用程序,但目前在BlackBerry(OS 6.0+)上失敗。該應用程序用於處理所有3種風格,但自從將應用程序轉換爲動態下載更新(而不是每次對某些Javascript稍作更改時重新發布應用程序)時,該應用程序無法通過getDirectory函數。我正在使用Cordova 1.8.1。Phonegap/Cordova getDirectory在BlackBerry上失敗

這裏是我的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)); 
} 

我得到的1的錯誤代碼從getDirectory調用(GotFS功能)。我添加了額外的評論來測試。這是我知道的:

文件系統= '執着' fileSystem.root.name = 「」 fileSystem.root.fullPath = '文件:///店'

我上選中的文件科爾多瓦herehere和這裏是我在我的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中訪問權限時做錯了什麼),但在嘗試了各種不同的事情並在互聯網上搜索之後,我很難過......

任何幫助,將不勝感激。

回答

2

你的代碼看起來對我來說是正確的。

如果您有BlackBerry連接到USB並在「USB Drive」(USB驅動器)屏幕出現提示時輸入了設備密碼,那麼您將啓用「大容量媒體/存儲模式」。這會將文件系統鎖定到USB並阻止您的應用訪問它。我希望您在嘗試調用fileSystem.root.getDirectory時會看到一個錯誤。

+0

這是很好的知道......在模擬器中運行怎麼樣?我在那裏遇到同樣的問題。 – mason81 2012-08-21 18:47:15

+0

我會接受這個答案。它不能解決我的問題,但我確實發現BlackBerry設備不支持「傳輸」選項,因此,無論如何,我是否可以讀取這些文件並不重要,因爲我只是將其用作更新的手段它們是動態的,無論如何,我顯然無法對Cordova/Phonegap進行處理。感謝您花時間回答並提供有用的提示。 – mason81 2012-08-24 18:45:48

2

我對這個也有很多樂趣。我相信這種錯誤發生的原因有很多。

然而,對於我來說,當連接USB電纜時,Blackberry將帶走本地存儲和SD卡。 開發時不太有用,一些有意義的錯誤代碼會幫助BB!

希望這可以幫助別人。

1

對於blackberry10,科爾多瓦/ WebWorks的就試試這個:

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

而不是科爾多瓦的實現:

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

這工作對我來說,現在我有一個條件來觸發以上任何一個對於黑莓/其他人。希望它適合你們,就像它爲我做的那樣。

乾杯