我正在尝试创建一个在系统启动时运行的后台应用程序。当我手动(从功能区)运行它时,屏幕出现,但是当我将应用程序设置为启动应用程序(在描述符中自动运行启动选项)后,屏幕上不会显示任何内容。我正在尝试以下代码;
public class AppClass extends UiApplication {
public static void main(String[] args) {
AppClass theApp = new AppClass();
theApp.enterEventDispatcher();
}
public AppClass() {
pushScreen(new AppScreen());
}
}
这是屏幕类;
public final class AppScreen extends MainScreen {
private LabelField label;
public AppScreen() {
setTitle("AppTitle");
label = new LabelField();
label.setText("Ready.");
add(label);
}
}
我期待它是一个UI应用程序,因此无论是在启动时自动运行还是手动运行,它的屏幕都应该是可见的。如果我需要做一些让它按预期工作的东西,请指导我,我是BlackBerry开发的新手。 我正在以下环境中发展;
答案 0 :(得分:5)
自动启动应用程序在操作系统完成启动之前运行,因此不支持用户界面。我怀疑你的应用程序正在启动但在某些UI调用上失败。编写自动运行并从主屏幕运行的应用程序的文档记录方法是为自动运行提供一个交替的入口点,其参数告诉程序它已自动运行。然后使用API等待操作系统为UI应用程序做好准备。
public class AppClass extends UiApplication {
public static void main(String[] args) {
if (args.length > 0 && args[0].equals("auto-run")) {
// auto start, wait for OS
while (ApplicationManager.getApplicationManager().inStartup()) {
Thread.sleep(10000);
}
/*
** Do auto-run UI stuff here
*/
} else {
AppClass theApp = new AppClass();
theApp.enterEventDispatcher();
}
}
public AppClass() {
pushScreen(new AppScreen());
}
}
答案 1 :(得分:2)
从AppScreen类的构造函数中调用getApplication().requestForeground();,以便您的屏幕可见。
public final class AppScreen extends MainScreen {
private LabelField label;
public AppScreen() {
setTitle("AppTitle");
label = new LabelField();
label.setText("Ready.");
add(label);
getApplication().requestForeground();
}
}
一旦应用程序在后台运行,我们必须明确地将它带到前台以显示UI元素,这就是我们在这里所做的。