Blackberry - 如何在状态栏中使用通知图标 [英] Blackberry - How to use notification icon in statusbar

查看:17
本文介绍了Blackberry - 如何在状态栏中使用通知图标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In RIM Blackberry OS 4.6+ there is a new feature - ability to show notification icon in statusbar. Integrated application use it to give quick and informative information for user: Dealler - missed calls, Messages - unread messages etc.

删除了无效的 ImageShack 链接

通知图标的可能用途:

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

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

I would like to post a howto guide for this feature.

推荐答案

ApplicationIndicator class

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

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

Represents an application indicator that consists of an icon and optional numeric value.
The icon is placed in indicators area along with others such as new mail counter, calendar reminders, missed calls counter, security status and others.

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

    For this we should create instance of ApplicationIcon:

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

    Application icon class is used in conjunction with application indicator and application messages.
    It incapsulates image and its painting properties.

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

    然后我们应该使用 ApplicationIndicatorRegistry:

    ApplicationIndicatorRegistry.register(icon, iconOnly, visible)
    icon - 显示在指标区域的图标
    iconOnly - 指定指标是否应该只有图标表示而没有值
    visible - 指定指示器最初是否必须可见

    ApplicationIndicatorRegistry.register(icon, iconOnly, visible)
    icon - an icon to be displayed in the indicators area
    iconOnly - specifies if indicator should have icon representation only and no value
    visible - specifies whether indicator has to be visible initially

    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 方法:

    To modify number value, use ApplicationIndicator.setValue method:

    ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
    ApplicationIndicator appIndicator = reg.getApplicationIndicator();
    appIndicator.setValue(value);
    

    • 如果提供了非常大的值,则指示器将显示99+"或999+".
    • 要隐藏或显示指示器,请使用 ApplicationIndicator.setVisible

      To hide or show indicator, use ApplicationIndicator.setVisible

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

      Most likely you don't want your app indicator to stay in statusbar, it's better to ApplicationIndicatorRegistry.unregister() it on app close.

      图标:

      删除了无效的 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) {
              }
          }
      }
      

      这篇关于Blackberry - 如何在状态栏中使用通知图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆