BlackBerry应用开发者指南 选项API

移动开发
在前面我们已经介绍了《BlackBerry应用开发者指南》系列的使用受控API、Mail API和PIM API,本文本系列的第四篇——选项API。

本文为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()方法.将一个类的静态实例作为参数.

  1. private static DemoOptionsProvider _instance;  
  2. //...  
  3. public static DemoOptionsProvider getInstance() {  
  4. if(_instance == null) {  
  5.     _instance = new DemoOptionsProvider("Options Demo");  
  6. }  
  7. return _instance;  
  8. }  
  9. //...  
  10. public static void libMain(String[] args) {  
  11.     OptionsManager.registerOptionsProvider(getInstance());  

保存选项

为了保存当前选择的选项值,请实现Persistable接口.在你的实现中,定义方法设置所选的选项值,以及提交和获取持久存储里的选项值.

  注:如果你作为一个内部类实现Persistable接口,将它的get(),set(),以及commit()方法设置为public,这样其他的应用程序就可以访问选项数据.

提供选项数据的访问

在你的类库里,增加一个公共方法允许其他的应用程序访问选项数据.

代码实例

本实例描述了选项的使用.

例: DemoOptionsProvider.java

  1. /**  
  2. * DemoOptionsProvider.java  
  3. * Copyright 2002-2005 Research In Motion Limited.  
  4. */ 
  5. package com.rim.samples.docs.demooptionsprovider;  
  6. import net.rim.blackberry.api.options.*;  
  7. import net.rim.device.api.ui.component.*;  
  8. import net.rim.device.api.ui.container.*;  
  9. import net.rim.device.api.i18n.*;  
  10. import net.rim.device.api.system.*;  
  11. import net.rim.device.api.util.*;  
  12.  
  13. // A simple library class to demonstrate the use of the options facilities.  
  14. public final class DemoOptionsProvider implements OptionsProvider {  
  15.     // members  
  16.     private ObjectChoiceField _ocf;  
  17.     private OptionsDemoData _data;  
  18.     private String _title;  
  19.     private static DemoOptionsProvider _instance;  
  20.  
  21.     // constructors  
  22.     private DemoOptionsProvider() {  
  23.        }  
  24.  
  25.     private DemoOptionsProvider(String title) {  
  26.        _title = title;  
  27.        _data = OptionsDemoData.load();  
  28.        }  
  29.  
  30.     // Only allow one instance of this class.  
  31.     public static DemoOptionsProvider getInstance() {  
  32.        if (_instance == null) {  
  33.            _instance = new DemoOptionsProvider("Options Demo");  
  34.            }  
  35.        return _instance;  
  36.        }  
  37.  
  38.     // On startup, create the instance and register it.  
  39.     public static void libMain(String[] args) {  
  40.        OptionsManager.registerOptionsProvider(getInstance());  
  41.        }  
  42.  
  43.     // Get the title for the option item.  
  44.     public String getTitle() {  
  45.        return _title;  
  46.        }  
  47.  
  48.     // Add fields to the screen.  
  49.     public void populateMainScreen(MainScreen screen) {  
  50.        int index = _data.getSelected();  
  51.        String[] choices = {“High”, “Low”, “None”};  
  52.        _ocf = new ObjectChoiceField(“Security: “, choices, index);  
  53.        screen.add(_ocf);  
  54.        }  
  55.  
  56.     // Save the data.  
  57.     public void save() {  
  58.        _data.setSelected(_ocf.getSelectedIndex());  
  59.        _data.commit();  
  60.        }  
  61.  
  62.     // Retrieve the data. Used by other applications to access options data.  
  63.     public OptionsDemoData getData() {  
  64.        return _data;  
  65.        }  
  66.  
  67.     // Inner class to store selected option values.  
  68.     public static final class OptionsDemoData implements Persistable {  
  69.        private static final long ID = 0x6af0b5eb44dc5164L;  
  70.        private int _selectedOption;  
  71.        private OptionsDemoData() {         
  72.        }  
  73.  
  74.        public int getSelected() {  
  75.            return _selectedOption;  
  76.            }  
  77.        public void setSelected(int index) {  
  78.            _selectedOption = index;  
  79.            }  
  80.  
  81.        public void commit() {  
  82.            PersistentObject.commit(this);  
  83.            }  
  84.  
  85.        private static OptionsDemoData load() {  
  86.            PersistentObject persist = PersistentStore.getPersistentObject(  
  87.                   OptionsDemoData.ID );  
  88.            OptionsDemoData contents = (OptionsDemoData)persist.getContents();  
  89.            synchronized( persist ) {  
  90.               if( contents == null ) {  
  91.                   contents = new OptionsDemoData();  
  92.                   persist.setContents( contents );  
  93.                   persist.commit();  
  94.                   }  
  95.               }  
  96.            return contents;  
  97.            }  
  98.        }  
  99.   }  

【编辑推荐】

  1. 简介BlackBerry API
  2. BlackBerry应用开发者指南 使用受控API
  3. BlackBerry应用开发者指南 Mail API
  4. BlackBerry应用开发者指南 PIM API
责任编辑:佚名 来源: 10086
相关推荐

2011-04-13 11:31:06

PIM APIBlackBerry

2011-04-13 09:55:16

Mail APIBlackBerry

2011-04-02 13:44:08

2011-04-14 10:05:16

BlackBerry

2011-04-14 10:03:32

UI组件BlackBerry

2011-04-13 14:10:27

.alx文件BlackBerry

2011-04-14 10:34:08

BlackBerry

2010-05-22 16:57:09

BlackBerry开

2022-01-17 19:34:43

SentryWeb APISentry API

2011-07-19 09:51:32

性能优化Designing FAndroid

2011-04-18 11:00:34

使用音频BlackBerry

2011-02-16 16:45:23

MWCRIMBlackBerry

2011-04-26 10:19:46

BlackBerry

2018-03-27 23:25:40

Paddle

2020-07-15 07:00:00

移动应用开发者指南

2013-08-29 13:41:42

Windows 8.1

2011-04-15 15:16:28

使用图像对象画图BlackBerry

2019-08-16 10:55:37

开发者技能AI

2024-05-07 08:45:16

OpenAILlamaIndex大语言模型

2024-02-01 09:37:42

Kubernetes服务网格• 命令
点赞
收藏

51CTO技术栈公众号