代码之家  ›  专栏  ›  技术社区  ›  Maksym Gontar

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

  •  19
  • Maksym Gontar  · 技术社区  · 17 年前

    • 错过的事件
    • 其他

    1 回复  |  直到 11 年前
        1
  •  37
  •   SuperBiasedMan Jayesh Kalkani    11 年前

    应用程序指示器类

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


    • 应用程序只能注册一个指标,每次启动手机时都必须注册。
    • 如果状态栏上没有空间,指示器可能不可见
    • 若指示器用一个大图标初始化,则会抛出异常。
    • 指示器可以有可选的数值,通常用作计数器。
    • 该值可以是负数、0或正数。
    • 若指示器用作计数器,最好在其值等于0时将其隐藏。

    添加通知图标

    ApplicationIcon :


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

    然后我们应该注册ApplicationIndicator ApplicationIndicatorRegistry :

    应用程序指示符注册表注册( 图标 , icon仅限 , 可见的
    图标 -要在指示器区域中显示的图标
    icon仅限 -指定指示器是否应仅具有图标表示而没有值
    可见的

    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);
    

    ApplicationIndicator.setVisible

    最有可能的是,你不希望你的应用程序指示器停留在状态栏中,最好 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) {
            }
        }
    }