Подтвердить что ты не робот

Blackberry - Как использовать значок уведомления в строке состояния

В RIM Blackberry OS 4.6+ есть новая функция - возможность показывать значок уведомления в строке состояния. Интегрированное приложение использует его для быстрой и информативной информации для пользователя: Dealler - пропущенные вызовы, сообщения - непрочитанные сообщения и т.д.

удалена мертвая ссылка ImageShack

Возможное использование значка уведомления:

  • пропущенные события
  • Обновления RSS
  • статус объекта (например, погода/активность приложения/уровень сигнала gps)
  • другой

Я хотел бы опубликовать руководство для этой функции.

4b9b3361

Ответ 1

Класс ApplicationIndicator

Чтобы добавить/изменить/удалить значок уведомления, мы можем использовать ApplicationIndicator класс:

Представляет индикатор приложения, состоящий из значка и необязательного числового значения.
Значок помещается в область индикаторов вместе с другими, такими как новый счетчик почты, напоминания календаря, счетчик пропущенных вызовов, статус безопасности и другие.

  • Приложение может регистрировать только один индикатор и регистрировать его каждый раз при запуске телефона.
  • Все индикаторы очищаются при перезагрузке телефона.
  • Индикаторы могут быть не видны, если в строке состояния не будет места
  • Размеры индикатора зависят от текущей темы и размера экрана телефона.
  • Размер значка варьируется от 10x10 до 24x24.
  • Если индикатор инициализирован большим значком, генерируется исключение.
  • Индикатор может иметь необязательное числовое значение, которое обычно служит в качестве счетчика.
  • Значение может быть отрицательным, 0 или положительным.
  • Если индикатор используется в качестве счетчика, лучше скрыть его, когда его значение равно 0.
  • Если значение индикатора слишком велико, оно отобразит "99 +" или "999 +"

Добавить значок уведомления

Для этого мы должны создать экземпляр ApplicationIcon:

Класс значка приложения используется вместе с индикатором приложения и сообщениями приложения.
Он инкапсулирует изображение и его свойства окраски.

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

Затем мы должны зарегистрировать ApplicationIndicator с ApplicationIndicatorRegistry:

ApplicationIndicatorRegistry.register(значок, значокОдно, видимо)
icon - значок, отображаемый в области индикаторов
iconOnly - указывает, должен ли индикатор иметь только представление значка и нет значения visible - указывает, должен ли индикатор быть видимым изначально

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