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”获得更多信息
注: 当应用程序调用电话时,检查一个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; 
       } 
    }
Last Updated:2007年2月1日
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号