启动BlackBerry应用程序
调用API(net.rim.blackberry.api.invoke)允许应用程序启动标注你的BlackBerry应用程序.
注: 当应用程序调用电话时,检查一个ControlledAccessException.如果系统管理员通过应用程序控制限制访问电话应用程序,将抛出一个运行时错误. 为获得更多信息,参看BlackBerry应用程序开发者指南 第2卷:高级 第1卷:基础.
调用API新功能
从BlackBerry JDE 4.1起,有下面的功能:
可以改变AddressBookArguments (net.rim.blackberry.api.invoke.AddressBookArguments)来打开一个使用PIMContact的联系人.
可以改变CalendarArguments (net.rim.blackberry.api.invoke.CalendarArguments)查看存在的PIM事件.你不可以创建一个来自PIM对象的新事件.
可以改变MessageArguments (net.rim.blackberry.api.invoke.MessageArguments)创建一个包含主题和内容的消息
在Task应用程序无变化的情况下,不可以更新TaskArguments (net.rim.blackberry.api.invoke.TaskArguments).
为启动一个应用程序,调用带有合适常量和ApplicationArguments 子类的对象的Invoke.invokeApplication(int, ApplicationArguments)方法.
注:使用Invoke.invokeApplication(int, ApplicationArguments)将导致一个处理上下文的转化.当BlackBerry程序启动时,你的应用程序将失去控制.在启动的应用程序对话中止时,内容可能不会返回给你的应用程序.
应用程序
常量
类
Address book(地址本)
APP_TYPE_ADDRESSBOOK
AddressBookArguments
Calendar(日历)
APP_TYPE_CALENDAR
CalendarArguments
Memo pad(便笺)
APP_TYPE_MEMOPAD
MemoArguments
Messages(消息)
APP_TYPE_MESSAGES
MessageArguments
Phone(电话)
APP_TYPE_PHONE
PhoneArguments
Tasks(任务)
APP_TYPE_TASKS
TaskArguments
技巧:从浏览器应用程序API(net.rim.blackberry.api.browser)中调用BlackBerry浏览器.参看51页的”在浏览器中显示内容”获得更多信息.电话API (net.rim.blackberry.api.phone)提供访问电话应用程序的高级特性的能力. 参看77页的”电话API”获得更多信息
注: 当应用程序调用电话时,检查一个ControlledAccessException.如果系统管理员通过应用程序控制限制访问电话应用程序,将抛出一个运行时错误. 为获得更多信息,参看BlackBerry应用程序开发者指南 第2卷:高级 第1卷:基础.
下面的Restaurants.java实例的摘录创建了一个菜单调用电话程序打电话给餐厅.
private MenuItem phoneItem = new MenuItem(_resources.getString(MENUITEM_PHONE), 110, 12) {
public void run() {
synchronized(store) {
String phoneNumber = phonefield.getText();
if ( phoneNumber.length == 0 ) {
Dialog.alert(_resources.getString(ALERT_NO_PHONENUMBER));
}
else {
PhoneArguments call = new PhoneArguments(PhoneArguments.ARG_CALL,
phoneNumber);
Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, call);
}
}
}
};
加入一个菜单项到Blackberry应用程序中
应用程序菜单项API在net.rim.blackberry.api.menuitem包中.它使你可以增加一个菜单项到BlackBerry应用程序中.
例如,为了将一个客户关系管理程序集成到BlackBerry地址本程序中,加入一个View Sales Order菜单项.当用户单击View Sales Order菜单项时,应用程序将打开此联系人的销售订单列表.
ApplicationMenuItemRepository类让你可以加入或删除应用程序菜单项.它提供一些常量来定义一个菜单项显示的应用程序上下文.例如, 当一个消息窗口打开时,ApplicationMenuItemRepository.MENUITEM_MESSAGE_LIST常量指定了显示的菜单项.
ApplicationMenuItem抽象类定义了一个在应用程序菜单里显示的菜单项.
创建一个菜单项
扩展 ApplicationMenuItem 抽象类.
public class SampleMenuItem extends ApplicationMenuItem
{
...
}
指定菜单项在菜单的位置
你可以选择性的覆盖构造子.在下面的代码实例中,构造子调用了ApplicationMenuItem(),它带有一个菜单项在菜单里的相对位置.(一个较大的数字意味着菜单项在菜单的较低位置).
SampleMenuItem() {
super(20);
}
指定菜单项的文本
toString()的实现指定了菜单项在菜单中显示的文本.
public String toString() {
return "Open the Contacts Demo application";
}
指定菜单项的行为
run()的实现指定了某个菜单项的行为.
public Object run(Object context) {
Contact c = (Contact)context; // An error if this does not work.
}
if ( c ! null ) {
new ContactsDemo().enterEventDispatcher();
}
else
{
throw new IllegalStateException( "Context is null, expected a Contact instance");
}
Dialog.alert("Viewing a message in the messaging view");
return null;
}
注册应用程序菜单项
获取应用程序菜单项库(repository)
调用 ApplicationMenuItemRepository.getInstance().
ApplicationMenuItemRepository repository =
ApplicationMenuItemRepository.getInstance();
定义一个唯一值
使用包名的哈希值作为应用程序菜单项库的唯一ID.
long ID = 0x7cab1e23b72a0033L;
// Hash of com.rim.samples.docs.menuitem.
创建应用程序菜单项
调用构造函数.
TestApplicationMenuItem tami = new TestApplicationMenuItem();
加入一个菜单项到菜单库
调用addMenuItem().
repository.addMenuItem(ApplicationMenuItemRepository.MENUITEM_ADDRESSCARD_VIEW, tami);
代码实例
当用户在地址本里查看一个联系人时,下面的代码将创建一个菜单项.当用户点击此菜单项, 将显示Contacts Demo程序.
例: DemoAppMenuItem.java
/**
* DemoApplicationMenuItem.java
* Copyright (C) 2003-2005 Research In Motion Limited.
*/
package com.rim.samples.docs.menuitem;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.component.Dialog.*;
import net.rim.blackberry.api.menuitem.*;
import javax.microedition.pim.*;
import net.rim.device.api.pdap.*;
import com.rim.samples.docs.contactsdemo.*;
public final class DemoAppMenuItem extends Application {
private static long ID = 0x7cab1e23b72a0033L;
//com.rim.samples.docs.menuitem
public static void main(String[] args) {
DemoAppMenuItem app = new DemoAppMenuItem();
app.enterEventDispatcher();
}
DemoAppMenuItem() {
ApplicationMenuItemRepository amir =
ApplicationMenuItemRepository.getInstance();
amir.addMenuItem(ApplicationMenuItemRepository.MENUITEM_ADDRESSCARD_VIEW,
new SampleMenuItem());
}
private static class SampleMenuItem extends ApplicationMenuItem {
SampleMenuItem() {
super(20);
}
public String toString() {
return "Open the Contacts Demo";
}
public Object run(Object context) {
BlackBerryContact c = (BlackBerryContact)context; //an error if this doesn’t work
if ( c != null ) {
new ContactsDemo().enterEventDispatcher();
}
else {
throw new IllegalStateException( "Context is null, expected a Contact instance");
}
net.rim.device.api.ui.component.Dialog.alert("Viewing an email message in the email view");
return null;
}
}
}
BlackBerry 应用程序开发者指南 第二卷:高级--第7章 与BlackBerry应用程序通信
最新推荐文章于 2023-01-11 23:43:14 发布