Blackberry - 如何在状态栏中使用通知图标

Mak*_*tar 19 integration user-interface notifications blackberry rim-4.6

在RIM Blackberry OS 4.6+中,有一项新功能 - 能够在状态栏中显示通知图标.集成应用程序使用它为用户提供快速和信息丰富的信息:交易者 - 未接来电,消息 - 未读消息等.

删除了死的ImageShack链接

可能使用通知图标:

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

我想发布此功能的指南.

Mak*_*tar 37

ApplicationIndicator类

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

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

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

添加通知图标

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

应用程序图标类与应用程序指示符和应用程序消息一起使用.
它包含了图像及其绘画属性.

EncodedImage mImage = EncodedImage.getEncodedImageResource("indicator_icon.png");
ApplicationIcon mIcon = new ApplicationIcon(mImage);
Run Code Online (Sandbox Code Playgroud)

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

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

ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator indicator = reg.register(mIcon, false, true);
Run Code Online (Sandbox Code Playgroud)

修改指标图标和值

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

ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setIcon(icon);
Run Code Online (Sandbox Code Playgroud)

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

ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setValue(value);
Run Code Online (Sandbox Code Playgroud)
  • 如果提供非常大的值,则指示器将显示'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) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)