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

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

问题描述

在RIM的BlackBerry OS 4.6+还有一个新特性 - 以显示状态栏通知图标的能力。集成的应用程序中使用它给快速和内容丰富的信息为用户:Dealler - 未接来电,消息 - 未读邮件等。

删除死ImageShack链接

可能使用的通知图标:


  • 错过的事件

  • RSS更新

  • 对象状态(例如天气/应用活动/ GPS信号强度)


我想张贴HOWTO指南此功能。


解决方案

ApplicationIndicator类

要添加/修改/删除通知图标我们可以使用<一个href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIndicator.html\"相对=nofollow> ApplicationIndicator 类:


  

重新presents,由一个图标以及可选的数字值的应用指标。结果
  图标放置在指标方面与人相处,如新邮件柜台,日历提醒,未接来电柜台,安全状况等。



  • 应用程序可以注册只有一个指标,并有每一次注册它的手机开始。

  • 所有指标均在手机重启清除。

  • 指标可能是不可见的,如果有会在状态条上没有空间

  • 指示灯尺寸取决于当前的主题,手机屏幕尺寸。

  • 图标尺寸10×10,从变化到24x24的。

  • 如果指示灯初始化为大图标,然后抛出一个异常。

  • 指示器可以具有通常用作计数器可选的数字值。

  • 的值可以是负的,0或正的。

  • 如果指示灯用作计数器这是更好地隐藏它当其值等于0

  • 如果指标值过大,它会显示'99 +'或'999 +

添加通知图标

有关这一点,我们应该创建的<一个实例href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIcon.html\"相对=nofollow> ApplicationIcon :


  

应用程序图标类与应用指示符和应用程序消息一起使用。结果
  它incapsulates形象及其绘画的特性。


 恩codeDIMAGE mImage = EN codedImage.getEn codedImageResource(indicator_icon.png);
ApplicationIcon米康=新ApplicationIcon(mImage);

然后,我们应该<一个注册ApplicationIndicator href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIndicatorRegistry.html\"相对=nofollow> ApplicationIndicatorRegistry :


  

ApplicationIndicatorRegistry.register(图标 iconOnly 可见的)结果
  的图标的 - 要显示在指标方面结果的图标
  的 iconOnly 的 - 指定是否指示灯应该只有图标重新presentation和没有价值的结果
  的可见的 - 指定指示是否有可见最初


  ApplicationIndicatorRegistry章= ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator指标= reg.register(米康,假的,真正的);

修改指示器图标和值

要修改图标,使用<一个href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIndicator.html#setIcon(net.rim.blackberry.api.messagelist.ApplicationIcon)\"相对=nofollow> ApplicationIndicator.setIcon 方式:

  ApplicationIndicatorRegistry章= ApplicationIndicatorRegistry.getInstance();
ApplicationIndicator appIndicator = reg.getApplicationIndicator();
appIndicator.setIcon(图标);

要修改数值,使用<一个href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIndicator.html#setValue(int)\"相对=nofollow> ApplicationIndicator.setValue 方式:

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


  • 如果提供了非常大的价值,那么指示器将显示'99 +'或'999 +'。

要隐藏或显示的指标,使用<一个href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIndicator.html#setVisible(boolean)\"相对=nofollow> ApplicationIndicator.setVisible

注销ApplicationIndicator

最有可能你不希望你的应用程序的指标留在状态栏,最好是<一个href=\"http://www.blackberry.com/developers/docs/4.6.0api/net/rim/blackberry/api/messagelist/ApplicationIndicatorRegistry.html#unregister()\"相对=nofollow> ApplicationIndicatorRegistry.unregister()它的应用程序关闭。

示例应用程序

图标:

删除死ImageShack链接

截图:

删除死ImageShack链接

code:

 进口net.rim.blackberry.api.messagelist.ApplicationIcon;
进口net.rim.blackberry.api.messagelist.ApplicationIndicator;
进口net.rim.blackberry.api.messagelist.ApplicationIndicatorRegistry;
进口net.rim.device.api.system.En codeDIMAGE;
进口net.rim.device.api.ui.MenuItem;
进口net.rim.device.api.ui.component.LabelField;
进口net.rim.device.api.ui.component.Menu;
进口net.rim.device.api.ui.container.MainScreen;类血肌酐扩展MainScreen {
    恩codeDIMAGE mImageGreen = EN codeDIMAGE
            .getEn codedImageResource(bb_icon_green.png);
    ApplicationIcon mIconGreen =新ApplicationIcon(mImageGreen);
    恩codeDIMAGE mImageRed = EN codeDIMAGE
            .getEn codedImageResource(bb_icon_red.png);
    ApplicationIcon mIconRed =新ApplicationIcon(mImageRed);    ApplicationIcon米康= mIconGreen;    公共SCR(){
        添加(新的LabelField(使用菜单));
        添加(新的LabelField(登记指示));
        添加(新的LabelField(增量值));
        添加(新的LabelField(递减值));
        添加(新的LabelField(切换图标));
        添加(新的LabelField(注销指标));
    }    菜单项menuRegister =新菜单项(登记,0,0){
        公共无效的run(){
            registerIndicator();
        };
    };
    保护INT mValue = 0;
    菜单项menuIncrement =新菜单项(增量,0,0){
        公共无效的run(){
            mValue ++;
            updateValue(mValue);
        };
    };
    菜单项menuDecrement =新菜单项(减,0,0){
        公共无效的run(){
            mValue--;
            updateValue(mValue);
        };
    };
    菜单项menuSwitchIcon =新菜单项(图标,0,0){
        公共无效的run(){
            米康=(米康== mIconGreen)? mIconRed:mIconGreen;
            updateIcon(米康);
        };
    };
    菜单项menuUnregister =新菜单项(注销,0,0){
        公共无效的run(){
            unregisterIndicator();
        };
    };    保护无效列出MakeMenu(菜单菜单,例如INT){
        super.makeMenu(菜单,实例);
        menu.add(menu​​Register);
        menu.add(menu​​Increment);
        menu.add(menu​​Decrement);
        menu.add(menu​​SwitchIcon);
        menu.add(menu​​Unregister);
    }    私人无效registerIndicator(){
        尝试{
            ApplicationIndicatorRegistry章= ApplicationIndicatorRegistry
                    .getInstance();
            ApplicationIndicator指标=
                    reg.register(米康,假的,真正的);
        }赶上(例外五){
        }
    }    私人无效unregisterIndicator(){
        尝试{
            ApplicationIndicatorRegistry章= ApplicationIndicatorRegistry
                    .getInstance();
            reg.unregister();
        }赶上(例外五){
        }
    }    无效updateValue(int值){
        尝试{
            ApplicationIndicatorRegistry章= ApplicationIndicatorRegistry
                    .getInstance();
            ApplicationIndicator appIndicator =
                    reg.getApplicationIndicator();
            appIndicator.setValue(值);
        }赶上(例外五){
        }
    }    无效updateIcon(ApplicationIcon图标){
        尝试{
            ApplicationIndicatorRegistry章= ApplicationIndicatorRegistry
                    .getInstance();
            ApplicationIndicator appIndicator =
                    reg.getApplicationIndicator();
            appIndicator.setIcon(图标);
        }赶上(例外五){
        }
    }
}

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.

removed dead ImageShack link

Possible use of notification icon:

  • missed events
  • RSS updates
  • object status (ex. weather/app activity/gps signal strength)
  • other

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

解决方案

ApplicationIndicator class

To add/modify/remove notification icon we can use ApplicationIndicator class:

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.

  • Application can register only one indicator and has to register it every time the phone starts.
  • All indicators are cleared upon phone restart.
  • Indicators may be not visible if there will be no space on statusbar
  • Indicator dimensions depend on current theme and phone screen size.
  • The icon size varies from 10x10 up to 24x24.
  • If indicator is initialized with a big icon then an exception is thrown.
  • Indicator can have optional numeric value that usually serves as a counter.
  • The value can be negative, 0 or positive.
  • If indicator is used as a counter it's better to hide it when its value is equal to 0.
  • If indicator value is too big, it will display '99+' or '999+'

Add notification icon

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

Then we should register ApplicationIndicator with ApplicationIndicatorRegistry:

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

Modify indicator icon and value

To modify icon, use ApplicationIndicator.setIcon method:

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

To modify number value, use ApplicationIndicator.setValue method:

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

  • If very big value is provided then indicator will display '99+' or '999+'.

To hide or show indicator, use ApplicationIndicator.setVisible

Unregister ApplicationIndicator

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

Sample application

Icons:

removed dead ImageShack links

Screenshots:

removed dead ImageShack links

Code:

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) {
        }
    }
}

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

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