Blackberry - 如何将数据从后台传输到主ui应用程序

时间:2012-07-20 15:14:14

标签: blackberry push-notification

我使用推送通知来显示通知。它通过备用入口点工作正常。后台应用程序将侦听通知。当我点击通知时,我想在我的UI应用程序上打开一个特定页面。怎么做?我尝试使用以下代码,但它总是从起始页面加载Ui。如果应用程序已在运行,如何加载特定页面。否则从开始页面加载UI。另外,我想将一些值从后台应用程序传递给UI应用程序。

try {
     ApplicationDescriptor[] appDescriptors = 
         CodeModuleManager.getApplicationDescriptors(CodeModuleManager.getModuleHandle("MYAPP"));
     ApplicationDescriptor appDescriptor = 
         new ApplicationDescriptor(appDescriptors[0], new String[] {"MYAPP"});
     ApplicationManager.getApplicationManager().runApplication(appDescriptor);
} catch (ApplicationManagerException e) {
        e.printStackTrace();
}

1 个答案:

答案 0 :(得分:1)

已经将数据从后台传输到主UI应用程序(字符串"MYAPP")。

您的应用程序(listed in your previous question)启动,并检查传递给它的参数,然后确定是在后台运行,还是作为普通的UI应用程序运行。

您只需添加更多参数即可。在上面的代码中,将其更改为以下内容:

ApplicationDescriptor appDescriptor = 
     new ApplicationDescriptor(appDescriptors[0], 
                               new String[] { "MYAPP", "4", "FirstScreen" });

然后,在您的UiApplication子类中(例如在App.java中),您可以将其更改为

public static void main(String[] args)
{
    Application theApp = null;

    switch (args.length) {
    case 2:
        // initial screen and number of notifications provided
        theApp = new App(args[2]);
        app.setNumberOfNotificationsReceived(Integer.parseInt(args[1]);
        break;
    case 1: 
        // just the number of notifications was provided, not an initial screen name
        theApp = new App();
        app.setNumberOfNotificationsReceived(Integer.parseInt(args[1]);
        break;
    case 0:
    default:
        // no arguments .. launch the background application
        BackgroundApplication app = new BackgroundApplication();
        app.setupBackgroundApplication();
        theApp = app;
        break;
    }

    theApp.enterEventDispatcher();
}

...我在setNumberOfNotificationsReceived()课程中添加了App(String)方法和App构造函数。这只是例子。随心所欲地制作它们。

App.java:

public App()
{        
    // Push a screen onto the UI stack for rendering.
    pushScreen(new DefaultScreen());
} 

public App(String screenName) {
    if (screenName.equalsIgnoreCase("FirstScreen")) {
        pushScreen(new FirstScreen());
    } else {
        pushScreen(new DefaultScreen());
    }
}