2011-11-03 70 views
0

我在我的應用中實施了Filepicker,允許用戶從手機中選擇照片。我正在使用的代碼如下:如何讓FilePicker在某些BlackBerry手機上正常工作?

調用Filepicker:

try 
{ 
     UiApplication.getUiApplication().invokeLater(new Runnable() 
     { 
     public void run() 
     { 
      FilePicker fp = FilePicker.getInstance(); 
      fileListener = new FilePickListener(); 
      fp.setListener(fileListener); 
      fp.show(); 
     } 
      }); 
     } 
     catch (Exception e) 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() 
      { 
       public void run() 
       { 
         Dialog.alert("Please check your data card.."); 
       } 
      }); 
     } 

而且方法來獲取文件名在我FilePickListener:

public void selectionDone(String str) 
{  
    this.currFileName = str; 

    int index = str.lastIndexOf('/'); 
    Dialog.alert("Filename: "+str.substring(index+1).trim()); 
} 

這工作完全在我大多數手機已經嘗試過了(它已經與一些運行OS5和一些運行OS6的手機組合在一起)。但在有些情況下,如8900(運行OS v5.0.0.411),它不能正常工作。 Filepicker被調用並出現,但是當任何文件被選中時,selectionDone方法不會被調用。我已經在兩個獨立的8900上進行了測試,兩者都有相同的問題。

有沒有人有一個想法,爲什麼它適用於某些手機,而不是其他?

+0

你確定selectionDone不叫,只有一個對話框嘗試在selectionDone這樣的: 公共無效selectionDone(字符串str){ Dialog.alert( 「文件名:」 + STR)?; } 如果再調用方法 – frayab

+0

這是我檢查是否被調用的方式。我甚至只是放入了一個彈出對話框的通用消息,但沒有被調用。 – Buffel

回答

0

你是一個已知的問題,RIM的受害者趕在某些設備上此錯誤。

該問題被標記爲「固定」。但是沒有關於他們修復它的操作系統版本的信息。 (這麼難講這樣一個有用的信息?)

不過從評論的問題:

我們經驗上的大膽與9700 OS 5.0.0.321非常相同的問題,但是,問題不會出現在操作系統5.0.0.464

所以我的猜測會是他們修復它在OS 5.0.0.464。但是,這不是結束 - 在操作系統6 FilePickerappears broken in early versions of OS 6再次。結論 - 只是不使用它。使用自定義文件瀏覽器屏幕來選擇文件。 SDK 4.7.0中有一個名爲FileExplorerDemo的示例,請查看它的實現細節。

+0

謝謝。在這種情況下,我只會捕獲ControlledAccessException異常並使用它來調用自定義文件瀏覽器。我希望這種方法可行。 – Buffel

0

這是一個已知問題。 FilePicker無法在某些設備上打開並返回錯誤,如8900設備。 FilePicker throws ControlledAccessException:您可以通過添加catch (Error e) { }

UiApplication.getUiApplication().invokeLater(new Runnable() 
     { 
     public void run() 
     { 
      FilePicker fp = FilePicker.getInstance(); 
      fileListener = new FilePickListener(); 
      fp.setListener(fileListener); 
      fp.show(); 
     } 
      }); 
     } 
     catch (Exception e) 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() 
      { 
       public void run() 
       { 
         Dialog.alert("Please check your data card.."); 
       } 
      }); 
     } 
     catch (Error e) 
     { 
      UiApplication.getUiApplication().invokeLater(new Runnable() 
      { 
       public void run() 
       { 
         Dialog.alert("This device does not support File Picker"); 
       } 
      }); 
     } 
+0

謝謝。當我嘗試這個時,錯誤不會被拋出。 FilePicker仍然彈出。 您是否知道我可以在哪裏找到發生此問題的手機列表?我有另一個可以使用的自定義文件瀏覽器,而不是可以在這些手持設備上實現的FilePicker。 或者,當我運行應用程序時,是否有任何功能可以確定此問題是否出現在特定手機上,以便我可以構建一個版本並讓它自己確定要使用哪個文件瀏覽器? – Buffel

+0

當發生錯誤時,FilePicker不會彈出...所以如果它彈出沒有錯誤... 檢查您的日誌,按ALT + LGLG,看看是否引發錯誤 –

+0

啊哈。好的,日誌告訴我,由於未經授權嘗試監視按鍵,它拋出了ControlledAccessException。我想知道爲什麼這個異常沒有被我的異常處理程序捕獲。無論哪種方式,它絕對不會拋出一個錯誤,因爲FilePicker仍然彈出。 – Buffel

相關問題