WEB开发网
开发学院软件开发Java 用开源工具创建 BlackBerry 应用程序,第 3 部分:... 阅读

用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

 2009-12-24 00:00:00 来源:WEB开发网   
核心提示:在数字时代,社交网络应用程序对消费者和业务市场的影响是最有吸引力的奇迹之一,用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序,营销专家改变了与潜在客户打交道的方式,具有相同志趣的群体能够快速组建起来,通过在社交网络应用程序中使用 Java 开源技术和流行的 PIM 数据,为倍受推崇的

在数字时代,社交网络应用程序对消费者和业务市场的影响是最有吸引力的奇迹之一。营销专家改变了与潜在客户打交道的方式,具有相同志趣的群体能够快速组建起来,这都与社交网络分不开。2008 年秋季的美国总统竞选表明,社交网络已经成为成功的政治竞选的一部分。社交网络与流行的、强大的 BlackBerry 平台的结合将是一个充满活力的组合。本教程是“用开源工具创建 BlackBerry 应用程序”系列的第 3 部分,它探索了为何 BlackBerry 是编写和部署社交网络应用程序的强大移动设备。

开始之前

本系列通过一个移动电话数据收集应用程序,探索了如何用开放源码和 Java™ 技术开发 BlackBerry 应用程序。第 1 部分 介绍了 BlackBerry 开发,内容包括平台简介、BlackBerry 开发工具概述,以及完整的数据收集应用程序的构建。第 2 部分 通过创建一个 BlackBerry RSS 阅读器探索了 RSS 数据发布格式。

本教程面向的读者是对在社交网络应用程序环境中开发 BlackBerry 应用程序感兴趣的 Java 开发人员。本教程的示例利用可以免费获得的 BlackBerry 开发工具演示了一个基本的社交网络应用程序。具备开发移动电话应用程序的经验会有帮助,但不是必要的。开发 BlackBerry 应用程序必须了解 Java 编程技巧,但这些技巧在本教程中不是必要的。同样,熟悉社交网络概念会有帮助,但是也不做要求。

关于本教程

为什么要为 BlackBerry 编写社交网络应用程序?社交网络非常流行,人们希望能够随时随地使用它。许多社交网络用户拥有 BlackBerry 移动电话。BlackBerry 平台已经发展成熟,可以为其构建社交网络。BlackBerry 是可通过 Internet 访问的可靠设备,同时也是优秀的消息平台。大部分 BlackBerry 移动设备的一个重要特征就是全键盘。带有数码照相机是很方便的,但键盘的力量更强大,用户依靠键盘快速向朋友和业务伙伴发送消息。BlackBerry 环境展示了一个开源的编程基础结构,您可以从中获得许多乐趣。这些功能为开发特性丰富的社交网络应用程序提供了机会。

本教程构建的应用程序并不是该领域的先驱;现在已经有针对 BlackBerry 的商业性社交网络应用程序。本教程的示例应用程序演示了如何构建一个有用的开源社交网络应用程序。学习如何将定制菜单添加到应用程序中,并实现一个 “Share this Event” 特性,它展示了如何与联系人数据库和 BlackBerry 上的日程事件交互。联系人和事件是更大更通用的数据集 Personal Information Management (PIM) 的一部分。当您理解如何在设备上与 PIM 交互的时候,就可以随心所欲地开发社交网络了。

本教程先简单介绍 PIM 数据,然后深入讨论开发 BlackBerry 社交网络应用程序的需求。下载 示例 BlackBerry 应用程序的完整源代码。

系统需求

本教程演示如何使用 BlackBerry 开发工具为 BlackBerry 移动电话构建一个开源社交网络应用程序。您将需要一个 BlackBerry Java Development Environment (JDE) 或其他可用环境,以开发社交网络应用程序。

示例代码概述

本教程将为 BlackBerry 设备构建一个名为 IBMCalendar 的社交网络应用程序。在阅读本文的过程中,尝试超越基础内容,思考更加深远的东西;这些数据将用于今天构建的社交网络应用程序。请 下载 源代码。源代码片段包括:

ContactList处理来自 PIM 数据库的联系人列表。IBMCalendarApplication 类包含该应用程序的入口点。IBMCalendar 构造器这个方法演示如何为内置的 BlackBerry 应用程序添加一个菜单项。CalendarMenus这个类包含将添加到 BlackBerry 上的日历/日程表应用程序的菜单 UI 元素。CalendarMenus.run()当用户选择添加到 DateBook 应用程序的定制菜单时,将调用这个方法。CalendarMenus.toString()这个方法非常简单,但非常重要。它控制菜单的文本名称或标签。CalendarMenus.handleCalendarEvent()当添加到日程表应用程序的定制菜单处理日程表条目或事件时,将调用这个方法。BlackBerryContactList这个类提供联系人查?功能,可以找到用户的电子邮件地址。这个类从较高级别演示与 PIM 数据库的交互。Event 和 Contact 这两个类用于从 BlackBerry PIM 数据库提取数据。SendEmail这个类与 BlackBerry 的消息传递基础结构交互,以发送电子邮件。

PIM 基础知识

在安装 BlackBerry JDE 并构建应用程序之前,我们先了解一些关于 PIM 的基础知识。

PIM 数据元素

移动设备上(包括 BlackBerry 平台)最常见、最通用的数据元素包括:

地址或联系人比如您堂哥的工作电话号码日历/日程表事件比如下周四与潜在客户共进午餐任务项从食品店购买牛奶和鸡蛋

这些数据元素一直伴随着我们,至少自从几年前 Palm Pilot 改革了 Personal Digital Assistant (PDA) 市场之后是这样。所有数据元素都是 PIM 项。

所有主要的移动平台都支持这些数据元素,并且支持常用的桌面软件,比如 Microsoft® Outlook、Lotus Notes®,以及许多其他能提供效率的应用程序套件。在不同的数据源之间同步 PIM 数据看似简单,其实是一项困难的任务,并且因此出现了一个软件同步产业。在 BlackBerry 设备和桌面应用程序(或服务器环境)之间同步数据是一个宽泛的主题,本教程不打算重点讨论。

本教程主要关注在设备上与 PIM 数据的直接交互,因为:

许多用户没有与桌面应用程序同步的经验。即使进行过同步,也仅限于基于 Web 的社交网络应用程序。

更重要的是,社交网络应用程序的核心就是 PIM 数据。社交网络主要关注连接、分享,以及了解您的朋友和合作伙伴正在做什么(最后这点还存在争议)。

接下来,您将了解 BlackBerry SDK 中可以用于 PIM 数据库交互的一些包和类。

PIM 数据 API

PIM 数据主要由 BlackBerry 的 3 个应用程序使用:地址簿、日程应用程序和任务应用程序。通过这 3 个应用程序就可以输入、存储、获取和管理数据。图 1 显示了一个简单的事件,它记录了在下午 5 点吃晚餐。


图 1. BlackBerry 日程应用程序中的事件
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

这个事件显示在日程应用程序中。事件的提要是 “Dinner with In-Laws”,地点为 Taco Bell。进入事件可以了解更多信息。


图 2. 事件的细节
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

您可以设置事件的开始和结束时间,并指定一个闹钟,甚至将事件标记为重复,等等。这很好,但本教程对如何以编程的方式与数据交互更加感兴趣,所以我们详细看看 Event 数据类。

用 BlackBerry SDK/API 处理 PIM 数据时,需要注意两个级别的类:

javax.microedition.pim这个包包含通用的 PIM 数据。这个包中的类适用于 BlackBerry 之外的其他设备,因此代表了核心的 PIMItem。net.rim.blackberry.api.pdap这个包包含了专门用于 BlackBerry 的扩展,它们基于 javax.microedition.pim 类。

javax.microedition.pim 包中的 Event 类扩展了 PIMItem,这是一个更基础的超类。PIMItem 是一个通用的 PIM 数据元素,它包含一组数据字段。PIMItems 可以组织到 PIMList 中,后者是一组 PIMItems。某个平台支持的特定字段可能会不同,并且由存储 PIMItem 的 PIMList 来决定。

PIMItem 中的数据字段可以具有不同的数据类型。常见的数据类型包括:

String

Stringarray

Date

Integer

Boolean

Binary

您可能已经猜到,PIMItem 类包括几个用于操作数据的 getters 和 setters。每个数据字段包括:

一个用于描述它的标签,比如电话号码。

0 个或多个数据值,一个以 0 索引开始的值列表。get 和 set 方法有一个协助管理数据的 index 参数。

这些数据值的属性。

特定的数据类型。

字段名由在 Contact、Event 和 ToDo 类中定义的整型值标识。表 1 给出了一些样例字段名,以及 Event 类中包含的数据类型。


表 1. 样例事件数据字段

字段名数据类型
Summary, LocationString
Start, EndDate
AlarmInteger

实际上,数据值被储存为长整型,它与 java.util.Date 类是兼容的。这将用在示例应用程序代码中。

获取 PIM 数据

如前所述,PIMItems,比如 Events、Contacts 和 ToDos 都存储在 PIMLists 中。设备上可能有多个 PIMLists,但您通常只会碰到一个默认的 PIM 数据列表。为了访问 PIM 数据列表,您首先需要通过 javax.microedition.pim.PIM 类获得一个到 PIM 数据库的引用:PIM pim = PIM.getInstance();。

静态方法 getInstance() 获取 PIM 数据库的一个实例,它将在随后的操作中用到。这个类还包含打开现有 PIMLists 的方法,以及将 PIMItem 序列化到一个输入/输出流的方法。toSerialFormat 和 fromSerialFormat 这两个方法通常用于备份和同步。本教程的示例应用程序不使用它们。

示例应用程序使用 openPIMList 方法获取一个包含 PIMItems 的 PIMList。有两个 openPIMList 方法:一个用于打开默认的 PIMList,另一个为 PIMList 传递一个 String 参数。您可以使用 listPIMLists 方法获取可用的 PIMList 名称列表。这个方法返回一个在每个数组元素中包含 PIMList 名称的字符串数组。

许多类和方法都带有单词 “list”,这可能会有些混淆。注意 BlackBerry Java API 文档 中的数据类型。示例应用程序仅访问默认的 PIMList。不管使用哪个 openPIMList 方法,以下两个参数都是必须的:

pimListType也可能是 CONTACT_LIST、EVENT_LIST 或 TODO_LISTmode也可能是 READ_ONLY、WRITE_ONLY 或 READ_WRITE

打开 PIMList 之后,应用程序就可以通过枚举来访问元素。为了在特定的 CONTACT_LIST 或 PIMList 中检查所有联系人,可以使用清单 1 中的代码。


清单 1. 从 PIM 数据库访问联系人
BlackBerryPIMList contactList = (BlackBerryPIMList) 
  pim.openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY); 
 
For (Enumeration eContacts = contactList.items();eContacts.hasMoreElements();) 
{ 
  Contact contact = (Contact) eContacts.nextElement(); 
// do something with contact 
} 

要访问特定 PIMItem 中的字段,可以使用清单 2 中的 getString() 方法。


清单 2. 访问特定 PIMItem 中的字段的 getString() 方法
String emailAddress = c.getString(Contact.EMAIL,0); 

PIM 数据库还允许通过分类来轻松管理 PIM 数据。虽然本教程不讨论 PIM 分类,但这很容易实现。

至此,您已经了解 PIM 数据的结构和位置,以及如何访问它。在下一小节中,您将为 BlackBerry 构造一个社交网络应用程序。

BlackBerry 社交网络应用程序

本小节探讨 示例应用程序 的主要元素,包括相关的源代码片段。首先,了解一下应用程序的执行方式,以及相关的代码。

示例社交网络应用程序

示例应用程序 IBMCalendar 与前一个教程的应用程序有所不同。它没有自己的 UI 屏幕,并且被设计为直接与 BlackBerry PIM 应用程序交互。没错,这里没有定制的 UI 屏幕。将使用内置的钩和实用程序来完成所有东西,以实现所需的功能。

成功的应用程序必须很直观,容易使用,否则用户不会使用它。您见过这样的应用程序吗,虽然它有很多特性,但您根本不使用它,因为它的启动和访问很不方便。为了避免这种情况,这个示例应用程序将满足以下要求:

经常运行。每次启动 BlackBerry 设备时,应用程序也将启动(当然设备关机时它就会停止)。在应用程序栏中没有图标。

在日程应用程序中安装一个菜单,方便查找应用程序。高效的社交网络应用程序必须直观、容易操作。

使用 BlackBerryContactList 类的内置方法显示需要联系的朋友列表。所有朋友都包含在联系人数据库中。

应用程序的功能很简单。当在日程应用程序中选择一个事件时,可以通过选择一个定制菜单来分享该事件。


图 3. 分享事件
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

选择分享事件之后,您将获得一个能够分享该事件的朋友列表。


图 4. 选择可以分享事件的朋友
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

选择了分享事件的朋友之后,应用程序将自动向该朋友发送一封电子邮件,然后返回到日程应用程序。这个过程瞬间即可完成。它不仅友好,而且很容易使用。

现在,您已经了解应用程序的外观,接下来我们看看它的结构和代码。要继续构建示例应用程序,需要安装 BlackBerry Java Development Environment(如果还没有安装的话)。

应用程序的结构

本教程将把示例应用程序的构建分成几个部分。您可以 下载 完整的源代码。图 5 显示了示例应用程序中的源代码文件。


图 5. BlackBerry JDE 中的项目文件
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

因为这个示例应用程序没有定制的 UI,所有没有专门用于显示屏幕的类(就像本系列的前一篇教程一样)。为了在不使用 UI 的情况下自动启动,请在项目的属性对话框中选择 System Module 和 Auto-Startup。


图 6. 项目设置
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

在 IBMCalendar.java 文件中,查看如清单 3 所示的代码。就像在其他 Java 应用程序中一样,这个应用程序也需要一个入口点,即 IBMCalendar.java 中的 main。


清单 3. IBMCalendar.java 文件中的 main 方法
// IBMCalendar.java 
// MSI Services, Inc. 
// Frank Ableson 
// 973.448.0070 
// fableson@msiservices.com 
// code free to use for any purpose, commercial or otherwise 
package com.msi.ibm; 
import net.rim.device.api.ui.*; 
import net.rim.blackberry.api.menuitem.*; 
 
 
// our application 
class IBMCalendar extends UiApplication //implements GlobalEventListener 
{ 
   // application entry point 
  public static void main(String[] args) 
  { 
    System.out.println("main"); 
     // create an instance of our app 
    IBMCalendar theApp = new IBMCalendar(); 
     // "run" the app 
    theApp.enterEventDispatcher(); 
  } 
  // app constructor 
  public IBMCalendar() 
  { 
    // create Menu and add it to the Calendar Application 
    CalendarMenus cm = new CalendarMenus(0,"Share this Event"); 
   
    ApplicationMenuItemRepository.getInstance().addMenuItem 
(ApplicationMenuItemRepository.MENUITEM_CALENDAR,cm); 
  } 
} 

这个 main 方法创建 IBMCalendar 类的一个新实例,它是 UiApplication 类的一个扩展。UiApplication 包含在 net.rim.device.api.ui 包中。UiApplication 是所有具有 UI 的 BlackBerry 应用程序的基类。

IBMCalendar 类的构造器创建 CalendarMenus 类的一个实例。这个类在 CalendarMenus.java 中定义和实现。创建 CalendarMenus 类的实例之后,将使用 ApplicationMenuItemRepository 类的一个方法将其添加到日程应用程序。

BlackBerry 平台为向内置应用程序添加菜单提供了机会。这不像在其他平台上一样,需要复杂的修改或窗口枚举。这是 net.rim.blackberry.api.menuitem 包中的 BlackBerry SDK 的一个基本特性。

要将菜单添加到应用程序,您必须创建一个扩展 ApplicationMenuItem 类的类。这个类通常有 3 个方法,但在这里使用了 4 个方法,这是为了更方便地理解代码。实现 ApplicationMenuItem 的基本步骤如下:

提供一个构造器,它允许应用程序随意设置由 ApplicationMenuItem 使用的特定数据。例如,传入一个希望在定制菜单上显示的定制字符串值。

toString() 方法返回希望显示的名称。这必须动态生成或采用硬编码。

选择菜单时,将调用 run 方法。它仅带有一个 Object 类型的参数。您可以检查这个 Object,从而确定是否响应菜单选择。

在清单 4 中,创建了 CalendarMenus 实例。


清单 4:CalendarMenus 实例
CalendarMenus cm = new CalendarMenus(0,"Share this Event"); 

这个实例的菜单文本 “Share this Event” 可以换成您喜欢的其他字符串,但必须保证紧凑直观。清单 5 中这些方法的实现显示了来自 CalendarMenus.java 的代码。我们将逐个细看这个文件中的主要元素。


清单 5. CalendarMenus.java
//CalendarMenus.java 
// MSI Services, Inc. 
// Frank Ableson 
// 973.448.0070 
// fableson@msiservices.com 
// code free to use for any purpose, commercial or otherwise 
package com.msi.ibm; 
import net.rim.blackberry.api.mail.*; 
import net.rim.blackberry.api.mail.event.*; 
import net.rim.device.api.system.*; 
import net.rim.device.api.ui.*; 
import net.rim.blackberry.api.menuitem.*; 
import java.util.Enumeration; 
 
import javax.microedition.pim.Event; 
import net.rim.blackberry.api.pdap.BlackBerryEvent; 
 
import javax.microedition.pim.*; 
import java.util.Enumeration; 
import net.rim.blackberry.api.pdap.*; 
 
 
 
class CalendarMenus extends ApplicationMenuItem 
{ 
  String myname; 
  CalendarMenus(int order,String name) 
  {   
    super(order); 
    myname = name; 
  } 
   
 
  //Run is called when the menuItem is invoked 
  public Object run(Object context) 
  { 
    //context object should be an Event 
    if (context instanceof Event) 
    { 
      try 
      { 
         
        Event evt = (Event) context; 
 
        System.out.println("Handling our Calendar Option"); 
        java.lang.String s; 
        handleCalendarEvent(evt); 
      } 
      catch (Exception ex) 
      { 
        System.out.println(ex); 
        ex.printStackTrace(); 
      } 
     
    } 
    return context; 
  } 
 
  //toString should return the string we want to 
  //use as the test for the menuItem 
  public String toString(){ 
    return myname; 
  }   
   
   
   
  public void handleCalendarEvent(Event e) 
  { 
   System.out.println("handling Calendar Event [" + e.toString() + "]"); 
    
   try 
   { 
    net.rim.blackberry.api.pdap.BlackBerryContactList contactList = 
(BlackBerryContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST,PIM.READ_ONLY); 
    Contact c = contactList.choose(null,BlackBerryContactList. 
AddressTypes.EMAIL,false); 
    if (c == null) 
    { 
      System.out.println("no contact chosen, bail"); 
    } 
    else 
    { 
      String emailAddress = c.getString(Contact.EMAIL,0); 
      System.out.println(emailAddress); 
       
      String eventData = "You're Invited!\n"; 
      eventData += "What: " + e.getString(Event.SUMMARY,0) + "\n"; 
      eventData += "Where: " + e.getString(Event.LOCATION,0) + "\n"; 
      eventData += "When: " + new java.util.Date(e.getDate(Event.START,0)). 
toString() + " until " + new java.util.Date(e.getDate(Event.END,0)).toString() + "\n"; 
       
      System.out.println(eventData); 
       
      SendEmail se = new SendEmail(emailAddress,eventData); 
      se.start(); 
    } 
     
   } 
   catch (Exception ee) 
   { 
     System.err.println(ee.getMessage()); 
     ee.printStackTrace(); 
   } 
  } 
   
} 

这里有许多方法都调用 System.out.println。这是出于调试的目的,因为这样能帮助跟踪被调用的方法。这种技术对于没有 UI 的应用程序而言则更加有用。为了在 BlackBerry JDE 中查看这一数据,请查看 Output 窗口。该窗口在 View 菜单下,也可通过组合键 Alt+2 在 JDE 中访问。

从构造器开始,将根据您期望的菜单显示顺序传递一个参数。本例使用 0,它把菜单放在顶部,如 图 3 所示。这个值被传递给超类。这个构造器中的另一个参数是一个包含菜单名的字符串值。这个值存储在成员变量 myname 中。至此,构造器已经完成了它的工作,并且 CalendarMenus 类的这个实例已经准备就绪。

回过头来看看 清单 2,实例化这个类并在 IBMCalendar 类的构造器中使用它。实例化该类之后,必须将其添加到应用程序的菜单,这可通过 ApplicationMenuItemRepository 类实现。这段代码从静态 getInstance 方法获得该类的一个实例。addMenuItem 带有两个参数:

添加菜单的位置

CalendarMenu 的一个实例

ApplicationMenuItemRepository 提供了几个可以安装菜单的位置,它对所有内置应用程序都是一样的。RIM Java API Library 文档提供了关于可用菜单位置的完整参考。

在菜单被选择之后,将调用 CalendarMenus 类的 run 方法。这个方法的惟一参数是 Object 类型的。将在运行时询问这个参数,如果它是 Event 类型的,将被处理。在这个例子中,将把该事件传递给 handleCalendarEvent 方法进行处理。handleCalendarEvent 方法执行 3 个主要的步骤:

通知用户选择一个联系人。为此,将访问 PIM 数据库并打开默认的联系人列表。当 PIMList 被打开之后,将调用 choose 方法。这个方法实例化一个 “search user interface”,用户可以从这里选择一个联系人。第 2 个参数 BlackBerryContactList.AddressTypes.EMAIL 命令 choose 方法显示带有电子邮件地址的联系人。如果没有选择任何联系人,应用程序将不采取下一个行动。

如果选择了联系人,将提取事件数据并转换为简单的人类可读的 “What, Where, When” 格式。“date” 值用作 java.util.Date 的匿名实例的参数。将从 Contact 实例提取电子邮件地址。

具有电子邮件地址和带有特定格式的文本体之后,下一步就是发送电子邮件。

发送电子邮件

社交网络应用程序的最后步骤就是向朋友发送一个简单的电子邮件,以分享感兴趣的事件。为此,示例应用程序实现一个名为 SendEmail 的类。可以在 SendEmail.java 中找到它。


清单 6. 发送电子邮件
// SendEmail.java 
// MSI Services, Inc. 
// Frank Ableson 
// 973.448.0070 
// fableson@msiservices.com 
// code free to use for any purpose, commercial or otherwise 
 
 
package com.msi.ibm; 
 
import net.rim.blackberry.api.mail.event.*; 
import net.rim.blackberry.api.mail.*; 
import net.rim.device.api.system.*; 
import net.rim.device.api.ui.component.Dialog; 
 
 
 
/** 
 * 
 */ 
class SendEmail extends Thread 
{ 
  boolean bCanSend = false; 
  Store msgStore; 
  Folder[] folderList;  
  Folder outFolder; 
  Message msg; 
  Transport emailTransport; 
  String _emailTo,_emailBody; 
 
  SendEmail(String emailTo,String emailBody) 
  {   
    try 
    { 
        Session s = Session.getDefaultInstance(); 
        if(s == null) 
        { 
          String errMsg = "Unabled to send email message.\n"; 
          Dialog.alert(errMsg); 
          bCanSend = false; 
        }          
        else 
        { 
          bCanSend = true; 
          
          
          _emailTo = emailTo; 
          _emailBody = emailBody; 
          
          emailTransport = Session.waitForDefaultSession().getTransport(); 
          msgStore = Session.waitForDefaultSession().getStore(); 
          folderList = msgStore.list(Folder.SENT); 
          outFolder = folderList[0]; 
          msg = new Message(outFolder); 
        } 
      
     } 
     catch(NoSuchServiceException nse) 
     { 
        nse.toString(); 
     } 
    
  } 
   
  public void run() 
  { 
    System.out.println("SendEmail :: running"); 
    if(bCanSend == true) 
    { 
      try 
      { 
        Address [] addresses = new Address[1]; 
        addresses[0] = new Address(_emailTo, _emailTo); 
        msg.addRecipients(Message.RecipientType.TO, addresses); 
        msg.setSubject("IBM Calendar Share!"); 
        msg.setContent(_emailBody); 
        emailTransport.send(msg); 
      } 
      catch(Exception e) 
      { 
        System.out.println("Exception caught trying to send email: " + 
          e.toString()); 
      } 
    } 
  } 
} 

SendEmail 扩展了 java.util.Thread。您希望发送电子邮件这个任务独立于任何 UI 线程。实现这个类的构造器带有两个参数 — 收信人和格式化消息。构造器通过以下步骤尝试一些初始化工作:

连接到 BlackBerry 设备的通信子系统。

获得发件箱的一个引用。

在发件箱内创建一个类型为 Message 的新的电子邮件消息。

当这个类开始之后,将填写消息的地址,填充邮件正文并发送邮件。

运行应用程序

至此,您已经查看了所有重要的代码片段,我们现在开始构建和测试应用程序。假设构建的应用程序没有任何错误,那么您就可以在 BlackBerry 模拟器中运行它了:

确保 MDS 模拟器正在运行。MDS 模拟器允许 BlackBerry 模拟器连接到网络,包括 Internet。

选择 F5 键启动 BlackBerry 模拟器。本教程的示例应用程序将在后台启动。

为了测试应用程序,必须确保您的设备有一些联系人和一个事件。当事件在日程应用程序中突出显示时,选择 Share this Event 菜单。

选择一个联系人。您的朋友将收到一封简单友好的邮件,邀请他们加入您的活动。图 7 显示了电子邮件邀请。

图 7. 分享事件
用开源工具创建 BlackBerry 应用程序,第 3 部分: 构建社交网络应用程序

等一等!您的 BlackBerry 设备是否有一个称为 Invite Attendee 的特性?请尝试该特性。收件人接收到一个 “ics” 文件,它采用标准的会议邀请格式。除非您的邮件客户端已经配置,能够处理这个 ics 文件,否则它将呈现为乱码文本。

这个社交网络应用程序是一个很好的入门,您可以以它为基础编写更有创造性的应用程序。除了发送电子邮件之外,它还可以为博客添加一个条目。您可以充分发挥自己的想象力,去实现更加有趣的应用程序。

下一个步骤

在结束本教程之前,我们再说说几个注意事项。

应用程序签名

这个示例应用程序中使用的一些编程接口要求应用程序经过签名,这样它才能运行在真正的 BlackBerry 设备上。要了解更多关于如何为应用程序签名的信息,请查看本系列的 第 1 部分。

错误处理

为了文章的简洁和清晰,本教程没有详细讨论错误处理。当然,任何产品级的代码都应该为用户提供处理错误的方法和说明。

多个收件人

这个示例应用程序仅允许您与一个朋友分享事件。您可以改进它。反复调用 contactList.choose() 方法直至返回一个 null 响应,从而添加多个邮件邀请收件人。对于每个从这个 choose 方法调用获取的有效联系人,将他们添加到一个向量中。然后,对于每个联系条目,添加一个随后会添加到消息中的个人地址。现在,您可以和多个朋友分享一个事件了!

结束语

在这个教程中,您探索了 BlackBerry 平台的 PIM 层。您了解了一些方便的特性,它们允许您向内置的 BlackBerry 应用程序添加自己的函数。通过使用 PIMList 的 BlackBerry 扩展,您可以轻松查找朋友的电子邮件地址,然后邀请他们参加您的日程表中安排的事件。

通过在社交网络应用程序中使用 Java 开源技术和流行的 PIM 数据,为倍受推崇的具有巨大潜力的 BlackBerry 平台挖掘了业务和客户应用程序方面的价值。未来的事情很难预料,但您的社交网络应用程序有可能成为下一代的 Facebook 或 Twitter!

本文示例源代码或素材下载

Tags:开源 工具 创建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接