我有一个BlackBerry UiApplication,它在标准的Phone和Contacts应用程序中注册了一些菜单项。我需要在手机启动时注册菜单项,即在我的UiApplication启动之前注册。
如果我将UiApplication配置为在启动时自动运行,并使用ApplicationMenuItemRepository在我的应用初始化代码中注册菜单项,我就可以实现此目的。
我的问题是,每次我的UiApplication随后打开时,我的初始化代码再次运行,我在Phone和Contacts应用程序中获得了重复的菜单项。 ApplicationMenuItemRepository不提供用于检查它们是否已注册的API。在我自己的代码中使用静态布尔也没有帮助,大概是因为每个应用程序实例使用不同的类加载器。
我在这里使用了错误的方法吗?我应该有一个单独的应用程序(注册电话/联系人菜单项)和UiApplication(我的观点)?这对我的需求来说过于复杂。
答案 0 :(得分:2)
单击项目节点。
右键单击并选择“属性”。
在“属性”窗口中,选择“应用程序”选项卡。
确保选中以下选项:启动时自动运行和系统模块(向系统注册线程)。
在与原始项目相同的文件夹下创建另一个项目。右键单击新项目节点,然后选择“属性”。
选择“应用程序”选项卡,然后从“项目类型”下拉菜单中选择“备用CLDC应用程序入口点”。如附件所示,从备用入口点下拉菜单中选择原始项目的名称(例如:trafficreporter)。同时指定使用此备用入口点启动应用程序的参数(例如:gui)。
修改原始项目的main()方法,如下所示:
public static void main(String [] args){ if(args!= null&& args.length> 0&& args [0] .equals(“gui”)){ //初始化应用程序的代码 theApp.enterEventDispatcher(); } else { //启动后台线程的代码} } }
将您的应用程序图标文件添加到这个新的“入口点”应用程序中,并将其设置为功能区图标。
答案 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);
}