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

В некоторой степени генераторы случайных чисел являются лошадями для курсов. Случайный класс реализует LCG с обоснованно выбранными параметрами. Но это все еще показывает следующие функции:

, Если эти вещи не будут иметь значения для Вас, то Случайный имеет плюс того, чтобы быть обеспеченным как часть JDK. Это достаточно хорошо для вещей как случайные игры (но не, где деньги включены). Нет никаких слабых семян как таковых.

Другая альтернатива, которая является генератор XORShift , который может быть реализован в Java следующим образом:

public long randomLong() {
  x ^= (x << 21);
  x ^= (x >>> 35);
  x ^= (x << 4);
  return x;
}

Для некоторых очень дешевых операций, это имеет период 2^64-1 (нуль не разрешен), и достаточно просто быть встроенным, когда Вы генерация значения неоднократно. Различные значения сдвига возможны: см. статью George Marsaglia о Генераторах XORShift для получения дополнительной информации. Можно считать биты в числах сгенерированными как являющийся одинаково случайным. Одна основная слабость - то, что иногда это будет входить в "колею", где не много битов установлены в числе, и затем требуется несколько поколений для выхода из этой колеи.

Другие возможности:

  • комбинируют различные генераторы (например, подают вывод от генератора XORShift в LCG, затем добавляют результат к выводу генератора XORShift с различными параметрами): это обычно позволяет слабым местам различных методов быть "сглаженными" и может дать более длительный период, если периоды комбинированных генераторов тщательно выбраны
  • , добавляет "задержка" (для предоставления более длительного периода): по существу, где генератор обычно преобразовывал бы последнее сгенерированное число, сохраните "буфер истории" и преобразуйте, скажем, (n-1023) th.

я сказал бы, избегают генераторов, которые используют глупый объем памяти, чтобы дать Вам период дольше, чем Вам действительно нужно (у некоторых есть период, больше, чем количество атомов во вселенной - Вам действительно обычно не нужно это). И обратите внимание, что "длительный период" не обязательно означает "высококачественный генератор" (хотя 2^48 является все еще немного низким!).

19
задан SuperBiasedMan 27 August 2015 в 11:11
поделиться

1 ответ

Класс ApplicationIndicator

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

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

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

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

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

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

    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) {
            }
        }
    }
    
37
ответ дан 30 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: