2

我有一个后台功能监听推送消息。我需要处理推力。我创建了在推送到达时执行任何操作的函数,它运行良好。例如,当推送到达时,我增加一个数字等。

但是,当用户按下 ok 进行推送时,实际使应用程序启动的代码是什么?

我只需要让应用程序正常启动,就像用户刚刚按下应用程序的图标一样。

I am using OS < 7.X
4

4 回答 4

3

一种典型的模式是构建一个有两个入口点的应用程序。也就是说,它可以以两种不同的方式启动。一种方式,将是正常的UiApplication。这是可以通过按下主屏幕图标启动的标准 BlackBerry 应用程序。

另一种方法是定义一个后台服务,处理推送通知,并在设备启动时由操作系统启动。

您将通过在应用程序的 BlackBerry_App_Descriptor.xml 文件中添加备用入口点来定义后台/推送入口点。确保选中Auto-run at StartupDo not display the application icon ...。除了 UiApplication 的正常入口点之外,您的应用程序描述符 xml 文件应包含以下内容:

  <AlternateEntryPoints>
    <AlternateEntryPoint Title="PushService" MainMIDletName="" 
                         ArgumentsForMain="-push" HomeScreenPosition="0"
                         StartupTier="7" IsSystemModule="true" 
                         IsAutostartup="true" hasTitleResource="false" 
                         TitleResourceBundleKey="" TitleResourceBundleName="" 
                         TitleResourceBundleClassName="" TitleResourceBundleRelativePath="">
      <Icons/>
      <KeywordResources KeywordResourceBundleName="" KeywordResourceBundleRelativePath="" KeywordResourceBundleClassName="" KeywordResourceBundleKey=""/>
    </AlternateEntryPoint>
  </AlternateEntryPoints>

然后,您将拥有一个像这样的主程序:

public class MyApp extends UiApplication

    public static void main(String[] args) {
       if (args.length > 0 && args[0].equals("-push")) {
          // this is the push service
          PushAgent pa = new PushAgent();
          pa.enterEventDispatcher();
       } else {
          // UiApplication
          MyApp app = new MyApp();
          app.enterEventDispatcher();
       }
    }
}

哪里PushAgent有课那个extends Application,没有UiApplication

然后,当您的推送代理收到通知并且您决定要显示 UI 时,请使用以下内容:

ApplicationDescriptor ad = ApplicationDescriptor.currentApplicationDescriptor();
// String[] used for command line args, but we don't pass any to the UI app
ApplicationDescriptor ui = new ApplicationDescriptor(ad, new String[] { });
ApplicationManager.getApplicationManager().runApplication(ui);
于 2013-04-17T05:06:54.053 回答
2

试试这个 - 当您单击确定按钮时,使用以下代码运行您的 ui 应用程序。

public void dialogClosed(Dialog dialog, int choice) {
      switch (choice) {
          case Dialog.OK: 
              try {

                  ApplicationDescriptor[] appDescriptors =CodeModuleManager.getApplicationDescriptors(CodeModuleManager.getModuleHandle("BlackBerryCity"));    //here BlackBerryCity is the COD module Name
                  ApplicationDescriptor appDescriptor = new ApplicationDescriptor(appDescriptors[0], new String[] {"BlackBerryCity"});
                  ApplicationManager.getApplicationManager().runApplication(appDescriptor);

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

              break;
          case Dialog.CANCEL:

              break;
          default:
              break;
       }
   }
于 2013-04-17T04:30:37.517 回答
1

为了完整起见,这里是您可以用来启动应用程序的所有选项:

我假设您已经有多个入口点 - 一个用于后台侦听器,一个用于 UI 应用程序。还假设您没有为 UI 应用程序传递任何应用程序参数。(有关如何执行此操作的完整说明,请参阅 Nate 的回答。)

  1. 使用runApplication()方法:

    ApplicationDescriptor ad = ApplicationDescriptor.currentApplicationDescriptor();
    // String[] used for command line args, but we don't pass any to the UI app
    ApplicationDescriptor ui = new ApplicationDescriptor(ad, new String[] { });
    //Launch the application and ask it to come in foreground
    ApplicationManager.getApplicationManager().runApplication(ui, true);
    
  2. 使用launch()方法:

    String modulename = "mymodule";
    ApplicationManager.launch(modulename);
    
  3. 使用launchApplication()方法:

    String modulename = "mymodule";
    ApplicationManager.launchApplication(modulename);
    

需要注意的一点是,如果您的 UI 应用程序已经打开,那么所有这些方法都会简单地将其带到前台,无论它处于何种状态。如果您需要单击按钮来打开应用程序的新实例,则必须将一些随机参数作为应用程序参数传递,然后在 main 方法中将其忽略。

于 2013-04-17T06:26:11.490 回答
1
class EntryPointForApplication extends UiApplication {

    private static EntryPointForApplication theApp;

    public EntryPointForApplication() { 
        GUIApplication scr = new GUIApplication(); 
        pushScreen(scr);         
    } 

}

另请阅读如何在黑莓应用程序中设置备用入口点?

于 2013-04-16T16:05:46.603 回答