19

在 RIM Blackberry OS 4.6+ 中有一个新功能 - 在状态栏中显示通知图标的能力。集成应用程序使用它为用户提供快速和翔实的信息:经销商 - 未接来电,消息 - 未读消息等。

删除了无效的 ImageShack 链接

可能使用通知图标:

  • 错过的活动
  • RSS 更新
  • 对象状态(例如天气/应用活动/gps 信号强度)
  • 其他

我想发布此功能的操作指南。

4

1 回答 1

37

应用指标类

要添加/修改/删除通知图标,我们可以使用ApplicationIndicator类:

表示由图标和可选数值组成的应用程序指示器。
该图标与新邮件计数器、日历提醒、未接来电计数器、安全状态等其他图标一起放置在指示器区域中。

  • 应用程序只能注册一个指示灯,并且每次手机启动时都必须注册它。
  • 手机重启后所有指示灯都清零。
  • 如果状态栏上没有空间,指示器可能不可见
  • 指标尺寸取决于当前主题和手机屏幕尺寸。
  • 图标大小从 10x10 到 24x24 不等。
  • 如果指标用大图标初始化,则抛出异常。
  • 指标可以具有通常用作计数器的可选数值。
  • 该值可以是负数、0 或正数。
  • 如果指标用作计数器,最好在其值为 0 时隐藏它。
  • 如果指标值太大,将显示'99+'或'999+'

添加通知图标

为此,我们应该创建ApplicationIcon的实例:

应用程序图标类与应用程序指示器和应用程序消息一起使用。
它封装了图像及其绘画属性。

EncodedImage mImage = EncodedImage.getEncodedImageResource("indicator_icon.png");
ApplicationIcon mIcon = new ApplicationIcon(mImage);

然后我们应该使用 ApplicationIndicatorRegistry 注册ApplicationIndicator

ApplicationIndicatorRegistry.register( icon , iconOnly , visible )
icon - 要在指示器区域中显示的图标
iconOnly - 指定指示器是否应仅具有图标表示并且没有值
可见- 指定指示器是否必须在初始时可见

ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator indicator = reg.register(mIcon, false, true);

修改指标图标和值

要修改图标,请使用ApplicationIndicator.setIcon方法:

ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setIcon(icon);

要修改数值,请使用ApplicationIndicator.setValue方法:

ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setValue(value);
  • 如果提供了非常大的值,则指标将显示“99+”或“999+”。

要隐藏或显示指标,请使用ApplicationIndicator.setVisible

注销 ApplicationIndicator

很可能您不希望您的应用程序指示器留在状态栏中,最好在应用程序关闭时使用ApplicationIndicatorRegistry.unregister()它。

示例应用程序

图标:

删除了无效的 ImageShack 链接

截图:

删除了无效的 ImageShack 链接

代码:

import net.rim.blackberry.api.messagelist.ApplicationIcon;
import net.rim.blackberry.api.messagelist.ApplicationIndicator;
import net.rim.blackberry.api.messagelist.ApplicationIndicatorRegistry;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.container.MainScreen;

class Scr extends MainScreen {
    EncodedImage mImageGreen = EncodedImage
            .getEncodedImageResource("bb_icon_green.png");
    ApplicationIcon mIconGreen = new ApplicationIcon(mImageGreen);
    EncodedImage mImageRed = EncodedImage
            .getEncodedImageResource("bb_icon_red.png");
    ApplicationIcon mIconRed = new ApplicationIcon(mImageRed);

    ApplicationIcon mIcon = mIconGreen;

    public Scr() {
        add(new LabelField("Use menu to:"));
        add(new LabelField("Register indicator"));
        add(new LabelField("Increment value"));
        add(new LabelField("Decrement value"));
        add(new LabelField("Switch icon"));
        add(new LabelField("Unregister indicator"));
    }

    MenuItem menuRegister = new MenuItem("register", 0, 0) {
        public void run() {
            registerIndicator();
        };
    };
    protected int mValue = 0;
    MenuItem menuIncrement = new MenuItem("increment", 0, 0) {
        public void run() {
            mValue++;
            updateValue(mValue);
        };
    };
    MenuItem menuDecrement = new MenuItem("decrement", 0, 0) {
        public void run() {
            mValue--;
            updateValue(mValue);
        };
    };
    MenuItem menuSwitchIcon = new MenuItem("icon", 0, 0) {
        public void run() {
            mIcon = (mIcon == mIconGreen) ? mIconRed : mIconGreen;
            updateIcon(mIcon);
        };
    };
    MenuItem menuUnregister = new MenuItem("unregister", 0, 0) {
        public void run() {
            unregisterIndicator();
        };
    };

    protected void makeMenu(Menu menu, int instance) {
        super.makeMenu(menu, instance);
        menu.add(menuRegister);
        menu.add(menuIncrement);
        menu.add(menuDecrement);
        menu.add(menuSwitchIcon);
        menu.add(menuUnregister);
    }

    private void registerIndicator() {
        try {
            ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
                    .getInstance();
            ApplicationIndicator indicator = 
                    reg.register(mIcon, false, true);
        } catch (Exception e) {
        }
    }

    private void unregisterIndicator() {
        try {
            ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
                    .getInstance();
            reg.unregister();
        } catch (Exception e) {
        }
    }

    void updateValue(int value) {
        try {
            ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
                    .getInstance();
            ApplicationIndicator appIndicator = 
                    reg.getApplicationIndicator();
            appIndicator.setValue(value);
        } catch (Exception e) {
        }
    }

    void updateIcon(ApplicationIcon icon) {
        try {
            ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry
                    .getInstance();
            ApplicationIndicator appIndicator = 
                    reg.getApplicationIndicator();
            appIndicator.setIcon(icon);
        } catch (Exception e) {
        }
    }
}
于 2009-09-23T10:38:04.820 回答