BlackBerry 应用程序开发者指南 第二卷:高级–第7章 与BlackBerry应用程序通信

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)方法.

:使用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应用程序中

应用程序菜单项APInet.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) 20032005 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日

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注