如何从听众那里控制gui

时间:2010-07-08 19:00:02

标签: blackberry

我有一个实现ViewListener的Listener类(包含两个方法,open,close,当任何受监视邮箱的电子邮件打开/关闭时将触发)。所以这是从扩展UiApplication的类App中调用的,当我读取电子邮件时,open方法被触发,我想用特定的Screen调用我的原始(App类)(向app发送消息就足够了) 。目前我拥有它,以便App有一个静态变量,用于存储在设备上运行的app实例。我用它来调用一个方法来改变屏幕,但它实际上并没有提起它。 app.requestForeground()似乎也不起作用。

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试使用ApplicationManager来处理此问题?如果您有一个后台系统进程正在侦听事件,那么您的GUI进程可能甚至没有运行(即如果您执行了System.exit(0)而不是后台处理)。这里有一段代码可用于查找GUI进程(基于其应用程序描述符),并将其置于前台(如果它正在运行)或启动它(如果不是):

// Check if app is already running
ApplicationDescriptor descriptor = [descriptor for your GUI entrypoint];
ApplicationManager appManager = ApplicationManager.getApplicationManager();
int pid = appManager.getProcessId(descriptor);
if (pid != -1) {
    // App is running, bring it to the foreground
    appManager.requestForeground(pid);
} else {
    // App is not running, so launch it
    try {
        appManager.runApplication(descriptor);
    } catch (ApplicationManagerException e) {
        // Can't launch
    }
}

要获取GUI入口点的应用程序描述符,请使用以下方法:

  1. 使用CodeModuleManager.getModuleHandleForClass(MyApp.class)
  2. 获取模块句柄
  3. 使用CodeModuleManager.getApplicationDescriptors(handle)
  4. 获取句柄的应用描述符列表
  5. 检查每个描述符上的标志,直到找到等于“0”的标志。这意味着它不是系统/自动启动/运行时启动描述符 - 可能是您的GUI入口点。