BlackBerry 应用程序开发者指南 第二卷:高级--第7章 与BlackBerry应用程序通信
作者:Confach 发表于2006-04-28 22:22 pm
版权信息:可以任意转载, 转载时请务必以超链接形式标明文章原始出处 和作者信息.
http://www.cnblogs.com/confach/articles/387950.html
7
第7章 与BlackBerry应用程序通信
启动BlackBerry应用程序 加入一个菜单项到BlackBerry应用程序中 代码实例 |
启动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)方法.
应用程序 |
常量 |
类 |
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”获得更多信息
下面的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;
}
}
Last Updated:2007年2月1日