BlackBerry應(yīng)用開發(fā)者指南 選項(xiàng)API
本文為BlackBerry應(yīng)用開發(fā)者指南系列文章的第四篇《BlackBerry應(yīng)用開發(fā)者指南 選項(xiàng)API》。net.rim.blackberry.api.options 中的BlackBerry選項(xiàng)API允許你將一個選項(xiàng)條目增加到設(shè)備選項(xiàng)中.
使用此功能可以增加一個系統(tǒng)級的選項(xiàng)到多個程序可以使用的BlackBerry設(shè)備中.
當(dāng)你在主屏幕上點(diǎn)擊Options圖標(biāo)時,將會出現(xiàn)一列選項(xiàng),例如自動文本(AutoText),日期/時間(Date/Time),和防火墻.用戶可以選擇這些項(xiàng)查看某個選項(xiàng)的屏幕.此屏幕顯示一個或多個字段.一般來說,用戶可以更改每個字段的值.
增加選項(xiàng)
注冊增加選項(xiàng)
OptionsProvider接口的實(shí)現(xiàn)允許應(yīng)用程序增加選項(xiàng).它包含了getTitle(),save()以及populateMainScreen()的實(shí)現(xiàn).
BlackBerry設(shè)備啟動時增加選項(xiàng).
創(chuàng)建一個類庫工程,此工程有一個libMain()方法完成需要的注冊.
創(chuàng)建一個類庫工程
◆在BlackBerry JDE中,創(chuàng)建一個工程.
◆右擊工程,然后單擊Properties.
◆在Properties窗口,單擊Application標(biāo)簽.
◆在Project type下拉列表中,單擊Library.
◆在啟動選項(xiàng)里選擇Auto-run.
◆單擊OK.
作為一個選項(xiàng)提供者(Options Provider)注冊
getInstance()的實(shí)現(xiàn)可以得到一個類的靜態(tài)實(shí)例.一次只存在一個實(shí)例.調(diào)用libMain()的registerOptionsProvider()方法.將一個類的靜態(tài)實(shí)例作為參數(shù).
- 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());
- }
保存選項(xiàng)
為了保存當(dāng)前選擇的選項(xiàng)值,請實(shí)現(xiàn)Persistable接口.在你的實(shí)現(xiàn)中,定義方法設(shè)置所選的選項(xiàng)值,以及提交和獲取持久存儲里的選項(xiàng)值.
注:如果你作為一個內(nèi)部類實(shí)現(xiàn)Persistable接口,將它的get(),set(),以及commit()方法設(shè)置為public,這樣其他的應(yīng)用程序就可以訪問選項(xiàng)數(shù)據(jù).
提供選項(xiàng)數(shù)據(jù)的訪問
在你的類庫里,增加一個公共方法允許其他的應(yīng)用程序訪問選項(xiàng)數(shù)據(jù).
代碼實(shí)例
本實(shí)例描述了選項(xiàng)的使用.
例: 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;
- }
- }
- }
【編輯推薦】