本文为BlackBerry应用开发者指南系列文章的第四篇《BlackBerry应用开发者指南 选项API》。net.rim.blackberry.api.options 中的BlackBerry选项API允许你将一个选项条目增加到设备选项中.
使用此功能可以增加一个系统级的选项到多个程序可以使用的BlackBerry设备中.
当你在主屏幕上点击Options图标时,将会出现一列选项,例如自动文本(AutoText),日期/时间(Date/Time),和防火墙.用户可以选择这些项查看某个选项的屏幕.此屏幕显示一个或多个字段.一般来说,用户可以更改每个字段的值.
增加选项
注册增加选项
OptionsProvider接口的实现允许应用程序增加选项.它包含了getTitle(),save()以及populateMainScreen()的实现.
BlackBerry设备启动时增加选项.
创建一个类库工程,此工程有一个libMain()方法完成需要的注册.
创建一个类库工程
◆在BlackBerry JDE中,创建一个工程.
◆右击工程,然后单击Properties.
◆在Properties窗口,单击Application标签.
◆在Project type下拉列表中,单击Library.
◆在启动选项里选择Auto-run.
◆单击OK.
作为一个选项提供者(Options Provider)注册
getInstance()的实现可以得到一个类的静态实例.一次只存在一个实例.调用libMain()的registerOptionsProvider()方法.将一个类的静态实例作为参数.
- private static DemoOptionsProvider _instance;
- //...
- public static DemoOptionsProvider getInstance() {
- if(_instance == null) {
- _instance = new DemoOptionsProvider("Options Demo");
- }
- return _instance;
- }
- //...
- public static void libMain(String[] args) {
- OptionsManager.registerOptionsProvider(getInstance());
- }
保存选项
为了保存当前选择的选项值,请实现Persistable接口.在你的实现中,定义方法设置所选的选项值,以及提交和获取持久存储里的选项值.
注:如果你作为一个内部类实现Persistable接口,将它的get(),set(),以及commit()方法设置为public,这样其他的应用程序就可以访问选项数据.
提供选项数据的访问
在你的类库里,增加一个公共方法允许其他的应用程序访问选项数据.
代码实例
本实例描述了选项的使用.
例: DemoOptionsProvider.java
- /**
- * DemoOptionsProvider.java
- * Copyright 2002-2005 Research In Motion Limited.
- */
- package com.rim.samples.docs.demooptionsprovider;
- import net.rim.blackberry.api.options.*;
- import net.rim.device.api.ui.component.*;
- import net.rim.device.api.ui.container.*;
- import net.rim.device.api.i18n.*;
- import net.rim.device.api.system.*;
- import net.rim.device.api.util.*;
- // A simple library class to demonstrate the use of the options facilities.
- public final class DemoOptionsProvider implements OptionsProvider {
- // members
- private ObjectChoiceField _ocf;
- private OptionsDemoData _data;
- private String _title;
- private static DemoOptionsProvider _instance;
- // constructors
- private DemoOptionsProvider() {
- }
- private DemoOptionsProvider(String title) {
- _title = title;
- _data = OptionsDemoData.load();
- }
- // Only allow one instance of this class.
- public static DemoOptionsProvider getInstance() {
- if (_instance == null) {
- _instance = new DemoOptionsProvider("Options Demo");
- }
- return _instance;
- }
- // On startup, create the instance and register it.
- public static void libMain(String[] args) {
- OptionsManager.registerOptionsProvider(getInstance());
- }
- // Get the title for the option item.
- public String getTitle() {
- return _title;
- }
- // Add fields to the screen.
- public void populateMainScreen(MainScreen screen) {
- int index = _data.getSelected();
- String[] choices = {“High”, “Low”, “None”};
- _ocf = new ObjectChoiceField(“Security: “, choices, index);
- screen.add(_ocf);
- }
- // Save the data.
- public void save() {
- _data.setSelected(_ocf.getSelectedIndex());
- _data.commit();
- }
- // Retrieve the data. Used by other applications to access options data.
- public OptionsDemoData getData() {
- return _data;
- }
- // Inner class to store selected option values.
- public static final class OptionsDemoData implements Persistable {
- private static final long ID = 0x6af0b5eb44dc5164L;
- private int _selectedOption;
- private OptionsDemoData() {
- }
- public int getSelected() {
- return _selectedOption;
- }
- public void setSelected(int index) {
- _selectedOption = index;
- }
- public void commit() {
- PersistentObject.commit(this);
- }
- private static OptionsDemoData load() {
- PersistentObject persist = PersistentStore.getPersistentObject(
- OptionsDemoData.ID );
- OptionsDemoData contents = (OptionsDemoData)persist.getContents();
- synchronized( persist ) {
- if( contents == null ) {
- contents = new OptionsDemoData();
- persist.setContents( contents );
- persist.commit();
- }
- }
- return contents;
- }
- }
- }
【编辑推荐】