【问题标题】:Blackberry - How to use notification icon in statusbarBlackberry - 如何在状态栏中使用通知图标
【发布时间】:2010-11-30 17:10:50
【问题描述】:

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

删除了无效的 ImageShack 链接

通知图标的可能用途:

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

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

【问题讨论】:

    标签: user-interface blackberry integration notifications rim-4.6


    【解决方案1】:

    ApplicationIndicator 类

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

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

    • 应用程序只能注册一个指示灯,并且每次手机启动时都必须注册它。
    • 手机重启后,所有指示灯都会被清除。
    • 如果状态栏上没有空间,则指示器可能不可见
    • 指标尺寸取决于当前主题和手机屏幕尺寸。
    • 图标大小从 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) {
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2014-07-15
      • 1970-01-01
      • 2013-08-23
      • 2018-03-22
      • 2011-02-19
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多