2013-02-19 3 views
3

Я использую ниже код (особенно pushMessage) метод, чтобы показать некоторые уведомления пользователя:Blackberry - «Вы в настоящее время нет никаких новых уведомлений»

public final class MyApplicationMessageFolder 
{ 
    public static final long MyFolderId = 0x1256789012F10123L; 

    private ApplicationMessageFolder folder_; 
    private ApplicationIndicator indicator_; 
    private MyReadableListImpl collection_; 

    public void pushMessage(String subject, String message) 
    { 
     try 
     { 
      if (collection_ == null) 
      { 
       collection_ = new MyReadableListImpl(); 
      } 
      if (indicator_ == null) 
      { 
       registerFolderAndIndicator(); 
      } 

      ApplicationMessage am = new MyApplicationMessage(message, subject); 
      collection_.addMessage(am); 
      folder_.fireElementAdded(am); 

      // Update indicator 
      int size = collection_.size(); 
      indicator_.setValue(size); 
      indicator_.setVisible(size > 0); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.getMessage()); 
     } 
    } 

    private void registerFolderAndIndicator() 
    { 
     // registration application folder and indicator 
     ApplicationMessageFolderRegistry amfr = 
       ApplicationMessageFolderRegistry.getInstance(); 
     folder_ = amfr.getApplicationFolder(MyFolderId); 

     if (folder_ == null) 
     { 
      folder_ = 
        amfr.registerFolder(MyFolderId , "My Folder", collection_, true); 
      ApplicationIcon icon = 
        new ApplicationIcon(image_ = EncodedImage.getEncodedImageResource("my_icon.png"), true); 
      int status = ApplicationMessage.Status.INCOMING | ApplicationMessage.Status.UNOPENED; 

      amfr.registerMessageIcon(0, status, icon); 
      folder_.setSearchProperties(new ApplicationMessageSearchProperties(true)); 
      folder_.addListener(
        new ApplicationMessageFolderListener() { 

         public void actionPerformed(int action, ApplicationMessage[] messages, 
           ApplicationMessageFolder folder) { 
          if (action == ApplicationMessageFolderListener.MESSAGE_DELETED) { 
           for (int i = 0; i < messages.length; i++) 
            collection_.removeMessage(messages[i]); 

           indicator_.setValue(collection_.size()); 
           indicator_.setVisible(collection_.size() > 0); 
          } 
         } 
        }, 
        ApplicationMessageFolderListener.MESSAGE_DELETED | 
          ApplicationMessageFolderListener.MESSAGE_MARKED_OPENED | 
          ApplicationMessageFolderListener.MESSAGE_MARKED_UNOPENED, 
        ApplicationDescriptor.currentApplicationDescriptor()); 

      ApplicationMenuItem[] menu = new ApplicationMenuItem[] { 

        new ApplicationMenuItem(0) { 

         public String toString() { 
          return "Go to application"; 
         } 

         public Object run(Object context) { 
          return null; 
         } 
        } 
      }; 

      amfr.registerMessageMenuItems(0, status, menu, 
        ApplicationDescriptor.currentApplicationDescriptor()); 
      amfr.setBulkMarkOperationsSupport(0, status, true, false); 

      ApplicationIndicatorRegistry air = ApplicationIndicatorRegistry.getInstance(); 
      air.register(new ApplicationIcon(EncodedImage 
        .getEncodedImageResource("bar_icon_25.png")), 
        false, false); 

      indicator_ = air.getApplicationIndicator(); 
     } 
    } 

    class MyApplicationMessage implements ApplicationMessage 
    { 
     private String message_; 
     private String subject_; 
     private long timestamp_; 

     public MyApplicationMessage(String message, String subject) { 
      message_ = message; 
      subject_ = subject; 
      timestamp_ = new Date().getTime(); 
     } 

     public String getContact() { 
      return "HelloWorld"; 
     } 

     public Object getCookie(int cookieId) { 
      return null; 
     } 

     public Object getPreviewPicture() { 
      return image_; 
     } 

     public String getPreviewText() { 
      return message_; 
     } 

     public int getStatus() { 
      return ApplicationMessage.Status.UNOPENED; 
     } 

     public String getSubject() { 
      return subject_; 
     } 

     public long getTimestamp() { 
      return timestamp_; 
     } 

     public int getType() { 
      return 0x01; 
     } 
    } 

    private class MyReadableListImpl implements ReadableList { 
     private final Vector messages; 


     MyReadableListImpl() { 
      messages = new Vector(); 
     } 

     public Object getAt(final int index) { 
      return messages.elementAt(index); 
     } 

     public int getAt(final int index, final int count, 
       final Object[] elements, final int destIndex) { 
      return 0; 
     } 

     public int getIndex(final Object element) { 
      return messages.indexOf(element); 
     } 

     public int size() { 
      return messages.size(); 
     } 

     void addMessage(final ApplicationMessage message) { 
      messages.addElement(message); 
     } 

     void removeMessage(final ApplicationMessage message) { 
      messages.removeElement(message); 
     } 
    } 
} 

Я могу видеть мои сообщения в моей папке сообщений, но Я до сих пор не могу видеть их в панели уведомлений

enter image description here

может кто-нибудь объяснить, почему я вижу пустую панель уведомлений?

Благодаря

+0

ты отлаживать приложения?. Когда я отлаживаю ошибку, она показывает ошибку в ApplicationMessageFolderRegistry amfr = ApplicationMessageFolderRegistry.getInstance(); – Signare

+0

Исключение Null Pointer – Signare

+0

no. i did not change – Signare

ответ

1

Чтобы увидеть messges в раскрывающемся списке уведомлений есть нужно использовать вместо:

ApplicationFolderIntegrationConfig config = new 
     ApplicationFolderIntegrationConfig(true, true, 
     ApplicationDescriptor.currentApplicationDescriptor()); 
folder_ = amfr.registerFolder(MyFolderId , "My Folder", collection_, config); 

вместо:

folder_ = amfr.registerFolder(MyFolderId , "My Folder", collection_, true); 
Смежные вопросы