Ответ 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) {
}
}
}