我正在我的应用中实施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上进行了测试,两者都有同样的问题。
有没有人知道为什么它适用于某些手机而非其他手机?
答案 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的示例,请检查其实现细节。