Добавьте значок уведомления в строке состояния в BlackBerry JDE 4.5.0

Я пишу Java-приложение в BlackBerry JDE 4.5, которое начнет прослушивать какое-то событие при запуске. Я хочу отобразить маленький значок в строке состояния.

Я знаю его поддержку в версии 4.6.0 набора API BlackBerry с классами ApplicationIcon, ApplicationIndicator и ApplicationIndicatorRegistry, но какие классы есть в наборе API BlackBerry JDE 4.5.0?

Обновить

Я думаю, что есть некоторая поддержка для 4.5.0, так как я использую Blackberry Pearl 8100 с OS v4.5.0.81, которая отображает значки уведомлений в строке состояния для любых входящих сообщений или звонков.

Я сделал приложение Alternale Entry point & Main CLDC, как эта статья ниже,

Как - настроить альтернативную точку входа для моего приложения

У меня есть статья как,

Как - заставить работающее приложение пользовательского интерфейса перейти в фоновый режим и продолжить работу на переднем плане

в котором сказано, что

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

Но в моем случае main() не вызывается, когда я нажимаю на appIcon, когда приложение работает в фоновом режиме.

Он обновляет только appIcon и appName, которые ранее были установлены в альтернативной точке входа.

Так что я не понимаю, куда идет элемент управления, если он не вызывает main() при нажатии на updatedIcon?

У кого-нибудь есть идеи по этому вопросу?


Я обновил appIcon и appName.

Теперь то, что я хочу, - это "при нажатии на updatedIcon должен открываться определенный экран, и когда пользователь возвращается в главное меню, приложение должно получить свой исходный значок, имя приложения и поток должен пройти через main() при нажатии на исходную иконку приложения". "

Я думал, когда я нажимаю на обновленный appIcon элемент управления перейдет к main(), но вместо вызова main() он говорит:

Starting AppName
AppName already running

& непосредственно идет к первому экрану. и когда я возвращаюсь в главное меню, приложение обновляет значок и имя

Так как это получить?

1 ответ

К сожалению, это невозможно. Что вы можете сделать, это обновить значок приложения.

Также есть альтернативные способы уведомления:
Служба уведомлений для приложения Blackberry OS 4.5

Обновить значок приложения

http://img211.imageshack.us/img211/4527/icoupdate1.jpg http://img697.imageshack.us/img697/3981/icon.jpg http://img687.imageshack.us/img687/256/iconactive.jpg http://img130.imageshack.us/img130/3277/icoupdate2.jpg http://img691.imageshack.us/img691/6459/icoupdate3.jpg
Фоновое запущенное приложение:

public class NotifIconSrvc extends Application {

 private int mCount = 0;
 private int mSize = 0;

 public NotifIconSrvc() {
  Timer timer = new Timer();
  timer.schedule(sendEventTask, 1000, 3000);
 }

 TimerTask sendEventTask = new TimerTask() {

  public void run() {
   // Post the GlobalEvent.
   // Long = ci.samples.45.notificon
   ApplicationManager.getApplicationManager().postGlobalEvent(
     0x5a9f7caa171ab7b8L, mCount++, mSize++);
  }
 };

 public static void main(String[] args) {
  NotifIconSrvc app = new NotifIconSrvc();
  app.enterEventDispatcher();
 }
}  

Основное применение:

public class NotifIconApp extends UiApplication 
    implements GlobalEventListener {    
 private Bitmap mIcon = Bitmap.getBitmapResource("icon.png");
 private Bitmap mIconActive = 
        Bitmap.getBitmapResource("icon_active.png");
 private Scr mScreen = new Scr();

 public NotifIconApp() {
  addGlobalEventListener(this);
  pushScreen(mScreen);
 }

 public static void main(String[] args) {
  NotifIconApp app = new NotifIconApp();
  app.enterEventDispatcher();
 }

 public void eventOccurred(long guid, int count, int size, 
        Object object0, Object object1) {
  if (0x5a9f7caa171ab7b8L == guid) {
                    Bitmap icon = getUpdateIconBitmap(mIcon, count, size);
   HomeScreen.updateIcon(icon);
   Bitmap rolloverIcon = 
                        getUpdateIconBitmap(mIconActive, count, size);
   HomeScreen.setRolloverIcon(rolloverIcon);
   mScreen.updateScreen(count, size);
  }
 }

 private Bitmap getUpdateIconBitmap(Bitmap bmp, int count, int size) {
  int width = bmp.getWidth();
  int height = bmp.getHeight();
  Bitmap iconBmp = new Bitmap(width, height);
  Graphics g = new Graphics(iconBmp);
  XYRect rect = new XYRect(0, 0, width, height);
  g.drawBitmap(rect, bmp, 0, 0);

  g.setFont(g.getFont().derive(Font.BOLD, 20, Ui.UNITS_px,
    Font.ANTIALIAS_STANDARD, Font.COLORED_OUTLINE_EFFECT));

  String text = Integer.toString(count);
  g.setColor(Color.BLACK);
  g.drawText(text, 0, 2);

  text = Integer.toString(size) + " Kb";
  g.setColor(Color.GREEN);
  g.drawText(text, 0, height - 22);
  return iconBmp;
 }
}

class Scr extends MainScreen {
 LabelField mMessages;
 String mLabelText = "message count: ";
 String mTitleText = "message counter";

 public Scr() {
  add(mMessages = new LabelField(mLabelText));
  setTitle(mTitleText);
 }

 void updateScreen(int count, int size) {
  StringBuffer sb = new StringBuffer(Integer.toString(count));
  sb.append("/");
  sb.append(Integer.toString(size));
  sb.append("Kb");
  String text = sb.toString();
  setTitle(mTitleText + "(" + text + ")");
  mMessages.setText(mLabelText + text);
 }

 protected void makeMenu(Menu menu, int instance) {
  super.makeMenu(menu, instance);
  menu.add(mMenuGoBG);
 }

 MenuItem mMenuGoBG = new MenuItem("go background", 0, 0) {
  public void run() {
   UiApplication.getUiApplication().requestBackground();
  }
 };
}
Другие вопросы по тегам