Blackberry 如何使文件选择器在某些黑莓手机上正常工作?

Blackberry 如何使文件选择器在某些黑莓手机上正常工作?,blackberry,java-me,blackberry-jde,Blackberry,Java Me,Blackberry Jde,我正在我的应用程序中实现一个文件选择器,允许用户从手机中选择照片。我使用的代码如下所示: 调用文件选择器: 以及在我的FilePickListener中获取文件名的方法: 这在我试过的大多数手机上都能很好地工作,这些手机混合了一些运行OS5的手机和一些运行OS6的手机。但在某些情况下,如运行OS v5.0.0.411的8900,它无法正常工作。Filepicker会被调用并显示,但是当选择任何文件时,selectionDone方法不会被调用。我在两个不同的8900上测试了它,两个都有相同的问题

我正在我的应用程序中实现一个文件选择器,允许用户从手机中选择照片。我使用的代码如下所示:

调用文件选择器:

以及在我的FilePickListener中获取文件名的方法:

这在我试过的大多数手机上都能很好地工作,这些手机混合了一些运行OS5的手机和一些运行OS6的手机。但在某些情况下,如运行OS v5.0.0.411的8900,它无法正常工作。Filepicker会被调用并显示,但是当选择任何文件时,selectionDone方法不会被调用。我在两个不同的8900上测试了它,两个都有相同的问题


有人知道为什么它能在某些手机上工作而不能在其他手机上工作吗?

这是一个已知的问题。FilePicker不会在某些设备上打开并返回错误,如8900设备。通过添加捕获错误e{},可以在某些设备上捕获此错误


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

问题被标记为已修复。但是,没有关于他们修复它的操作系统版本的信息。说出这样有用的信息有那么难吗

但从对该问题的评论来看:

我们在Bold 9700上的OS 5.0.0.321也遇到了同样的问题。但是,该问题不会出现在操作系统5.0.0.464上


所以我猜他们会在操作系统5.0.0.464中修复它。但这并不是OS6中的最终文件选择器。结论-只是不要使用它。使用自定义文件浏览器屏幕拾取文件。SDK 4.7.0中有一个名为FileExplorerDemo的示例,请检查它的实现详细信息。

是否确实未调用selectionDone?请仅在selectionDone中使用如下对话框进行尝试:public void selectionDoneString str{Dialog.alertFilename:+str;}如果调用了这个方法,请再次检查。这是我检查是否调用它的方法。我甚至只是在一个对话框中弹出了一条普通的信息,但没有人打电话给我。谢谢。但是,当我尝试此操作时,不会抛出错误。文件选择器仍然会弹出。您知道我在哪里可以找到发生此问题的手机列表吗?我有另一个自定义文件浏览器,我可以使用它来代替我可以在这些手机上实现的文件选择器。或者,当我运行应用程序时,是否有任何功能可以确定特定手机上是否存在此问题,以便我只构建一个版本,并让它自行确定使用哪个文件浏览器?当抛出错误时,不会弹出文件选取器。。。所以如果它弹出,就没有错误。。。检查日志,按ALT+LGLG查看是否出现错误。好的,日志告诉我,由于未经授权尝试监视按键,它正在抛出ControlledAccessException。我想知道为什么我的异常处理程序没有捕获到这个异常。不管是哪种方式,它肯定不会抛出错误,因为文件选择器仍然会弹出。我将捕获ControlledAccessException异常,并在这些情况下使用该异常调用自定义文件浏览器。我希望这种方法会奏效。
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..");
                 }
            });
        }
public void selectionDone(String str)
{       
    this.currFileName = str;

    int index = str.lastIndexOf('/');
    Dialog.alert("Filename: "+str.substring(index+1).trim());
}
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");
                 }
            });
        }