BlackBerry:UiApplication中的重复应用程序菜单项

时间:2010-09-27 09:47:17

标签: blackberry

我有一个BlackBerry UiApplication,它在标准的Phone和Contacts应用程序中注册了一些菜单项。我需要在手机启动时注册菜单项,即在我的UiApplication启动之前注册。

如果我将UiApplication配置为在启动时自动运行,并使用ApplicationMenuItemRepository在我的应用初始化代码中注册菜单项,我就可以实现此目的。

我的问题是,每次我的UiApplication随后打开时,我的初始化代码再次运行,我在Phone和Contacts应用程序中获得了重复的菜单项。 ApplicationMenuItemRepository不提供用于检查它们是否已注册的API。在我自己的代码中使用静态布尔也没有帮助,大概是因为每个应用程序实例使用不同的类加载器。

我在这里使用了错误的方法吗?我应该有一个单独的应用程序(注册电话/联系人菜单项)和UiApplication(我的观点)?这对我的需求来说过于复杂。

3 个答案:

答案 0 :(得分:2)

使用Alternate Entry Point

  1. 单击项目节点。

  2. 右键单击并选择“属性”。

  3. 在“属性”窗口中,选择“应用程序”选项卡。

  4. 确保选中以下选项:启动时自动运行和系统模块(向系统注册线程)。

  5. 在与原始项目相同的文件夹下创建另一个项目。右键单击新项目节点,然后选择“属性”。

  6. 选择“应用程序”选项卡,然后从“项目类型”下拉菜单中选择“备用CLDC应用程序入口点”。如附件所示,从备用入口点下拉菜单中选择原始项目的名称(例如:trafficreporter)。同时指定使用此备用入口点启动应用程序的参数(例如:gui)。

  7. 修改原始项目的main()方法,如下所示:

    public static void main(String [] args){     if(args!= null&& args.length> 0&& args [0] .equals(“gui”)){         //初始化应用程序的代码         theApp.enterEventDispatcher();     } else {         //启动后台线程的代码}     } }

  8. 将您的应用程序图标文件添加到这个新的“入口点”应用程序中,并将其设置为功能区图标。

答案 1 :(得分:0)

用户退出应用程序时使用removeMenuItem()方法。它会起作用。

if(_serverMenuItem != null) {
    ApplicationMenuItemRepository.getInstance().
    removeMenuItem(ApplicationMenuItemRepository.MENUITEM_PHONE,_serverMenuItem);
}

答案 2 :(得分:0)

如果要将自定义菜单字段添加到本机应用程序,可以使用RunTime存储区注册菜单项,然后在重新运行代码时检查它:

ApplicationMenuItem ami = new ApplicationMenuItem(placement); // some placement you want     to use e.g 0x35090
ApplicationMenuItemRepository amir = ApplicationMenuItemRepository.getInstance();
    RuntimeStore store = RuntimeStore.getRuntimeStore(); // get the store instance

    if(store.get(ApplicationMenuItemRepository.MENUITEM_CALENDAR) == null)// if object is not added only then add the item to the menu
    {
        try 
        {
            store.put( ApplicationMenuItemRepository.MENUITEM_CALENDAR, ami );
        } 
        catch(IllegalArgumentException e){}
        amir.addMenuItem(ApplicationMenuItemRepository.MENUITEM_CALENDAR, ami);
    }