如何让FilePicker在某些黑莓手机上正常工作?

时间:2011-11-03 08:00:15

标签: blackberry java-me blackberry-jde

我正在我的应用中实施Filepicker,以允许用户从手机中选择照片。我正在使用的代码如下:

致电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上进行了测试,两者都有同样的问题。

有没有人知道为什么它适用于某些手机而非其他手机?

2 个答案:

答案 0 :(得分:0)

这是一个已知问题。 FilePicker无法在某些设备上打开并返回错误,如8900设备。您可以通过添加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");
                 }
            });
        }

答案 1 :(得分:0)

您是已知RIM问题的受害者:FilePicker throws ControlledAccessException

该问题标记为“已修复”。但是没有关于他们修复OS版本的信息。 (告诉这么有用的信息真难道吗?)

但是从评论到问题:

  

我们在Bold 9700上遇到与OS 5.0.0.321完全相同的问题。但是,OS 5.0.0.464上没有出现此问题

所以我猜他们会在OS 5.0.0.464中修复它。但这不是结束 - 再次在OS 6中FilePicker appears broken in early versions of OS 6。结论 - 只是不要使用它。使用自定义文件浏览器屏幕选择文件。 SDK 4.7.0中有一个名为FileExplorerDemo的示例,请检查其实现细节。