Tag: UI

Update GUI from background listener

detect gui,
getSingleton,
update status from background thread [1]

/**
 * FolderListenerGUI.java
 *
 * Author: Mark Sohm
 */

package com.samples.folderListener;

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;

public class FolderListenerGUI extends UiApplication
{
  private MainScreen mainScreen;
  private static RichTextField newMailNotifier;

  public static void main(String[] args)
  {
    boolean startup = false;

    //Check parameters to see if the application was entered
    //through the alternate application entry point.
    for (int i=0; i<args.length; ++i)
    {
      if (args[i].startsWith("init"))
      {
        startup = true;
      }
    }

    if (startup)
    {
      //Entered through the alternate application entry point.
      //Enable folderlistener on startup.
      FolderListenerApp.waitForSingleton();
    } else
    {
      //Entered by selecting the application icon on the ribbon.
      //Start the FolderListenerGUI.
      FolderListenerGUI app = new FolderListenerGUI();
      app.enterEventDispatcher();
    }
  }

  public FolderListenerGUI()
  {
    //Pass a reference to the FolderListenerGUI
    //to the FolderListenerApp.
    FolderListenerApp.waitForSingleton().
      setFolderListenerGUI(this);

    //Initialize mainScreen.
    mainScreen = new MainScreen();

    //Initialize the fields.
    newMailNotifier = new RichTextField("No mail yet...",
      RichTextField.NON_FOCUSABLE);
    LabelField title = new LabelField("Folder Listener GUI",
      LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
    mainScreen.setTitle(title);
    mainScreen.add(newMailNotifier);

    //Display the main screen
    pushScreen(mainScreen);
  }

  //Update the RichTextField with a new mail message.
  public static void NewMailArrived()
  {
    newMailNotifier.setText("New mail arrived!");
  }

  //Remove the FolderListenerGUI instance from
  //FolderListenerApp on exit.
  protected void onExit()
  {
    //Remove the reference to FolderListenerGUI
    //from FolderListenerApp.
    FolderListenerApp.waitForSingleton().unsetFolderListenerGUI();
  }
}

/**
 * FolderListenerApp.java
 *
 */

package com.samples.folderListener;

import net.rim.blackberry.api.mail.*;
import net.rim.blackberry.api.mail.event.*;
import net.rim.device.api.system.*;
import net.rim.blackberry.api.mail.*;

public final class FolderListenerApp implements FolderListener {

  private FolderListenerGUI folderListenerGUI = null;
  //Long value: com.samples.folderListener
  public static final long RTSID_MY_APP = 0x7451402f595f81a5L;

  public FolderListenerApp()
  {
    try
    {
      //Get the store from the default instance.
      Store store = Session.getDefaultInstance().getStore();
      //Add the folder listener to the store.
      store.addFolderListener(this);
    }
    catch (Exception e)
    {
      System.out.println(e.toString());
    }
  }

  //Returns an instance of the running FolderListenerApp.
  public static FolderListenerApp waitForSingleton()
  {
    //Ensure this is a singleton instance.

    //Open the RuntimeStore.
    RuntimeStore store = RuntimeStore.getRuntimeStore();
    //Obtain the reference of FolderListenerApp.
    Object obj = store.get(RTSID_MY_APP);

    //If obj is null, there is no current reference
    //to FolderListenerApp. Start a new instance
    // of FolderListenerApp if one is not running.
    if (obj == null)
    {
      //Store a reference to this instance in the RuntimeStore.
      store.put(RTSID_MY_APP, new FolderListenerApp());

      return (FolderListenerApp)store.get(RTSID_MY_APP);
    } else
    {
      return (FolderListenerApp)obj;
    }
  }

  //Called when a new message is created.
  public void messagesAdded(FolderEvent e)
  {
    //Get the message that fired the folder event.
    Message orginalMessage = e.getMessage();
    //Get the folder the message is in.
    Folder messageFolder = orginalMessage.getFolder();

    //Is the new message in the Inbox?
    if (messageFolder.getType() == Folder.INBOX)
    {

      //Check if the FolderListenerGUI is running.
      if (folderListenerGUI != null)
      {

        //Grab the lock for the running FolderListenerGUI.
        folderListenerGUI.invokeAndWait(new Runnable()
        {
          public void run()
          {
            //Call the NewMailArrived method to update the
            //screen with a notification.
            folderListenerGUI.NewMailArrived();
          }
        });
      }
    }
  }

  //Passes in reference to the FolderListenerGUI that is running.
  public void setFolderListenerGUI(FolderListenerGUI folderGUI)
  {
    folderListenerGUI = folderGUI;
  }

  //Set the reference to the FolderListenerGUI to null
  //(when it is shut down).
  public void unsetFolderListenerGUI()
  {
    folderListenerGUI = null;
  }

  //Not used in this sample.
  public void messagesRemoved(FolderEvent e)
  {
  }
}

[1] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800451/800783/How_To_-_Allow_a_background_listener_to_detect_and_update_a_GUI_application.html?nodeid=827026&vernum=0


auto-run startup application

BlackBerry application support auto-run at every startup.

if you want to create background application only use this [1]:

To create an auto-start application using the BlackBerry® Java® Plug-in for Eclipse®
  1. Double click on BlackBerry_App_Descriptor.xml found in the BlackBerry project.
  2. On the Application tab, check off Auto-run on startup.
  3. If you do not want an application icon to be shown on the home screen check the Do not display the application icon on the BlackBerry home screen check box.

To create an auto-start application using the BlackBerry JDE
   1. In the BlackBerry JDE, right-click the project and select Properties.
   2. On the Application tab, check the Auto-run on Startup check box.
   3. If you want your application to run in the background, and not appear on the ribbon, check the System Module check box.

else, if you want to create background application & ui application use this [2]:

The BlackBerry architecture allows applications to be started automatically in the background by the system without requiring the user to explicitly initialize them. This allows application threads to always run in the background with no user interface component. Alternate Entry Points can be used to launch the user interface (UI) component of the auto-started application when the user selects the icon from the ribbon. This feature allows application threads to be launched in the background that can be used for actions like listening for incoming push messages, pre-processing data, or initializing network communications with a server host.

After creating the projects for the original application, you will have to create another project for the UI entry point. Assuming that the thread to be run exists in the same project as the original application, follow these steps:

   1. Right-click the project node and select Properties.
   2. In the Properties window, select the Application tab.
   3. Verify the following options are checked: Auto-run on startup and System module (to register the thread with the system).
   4. Create another project under the same folder as the original project. Right-click the new project node and select Properties.
   5. Select the Application tab and select Alternate CLDC Application Entry Point from the Project type drop-down list. As shown in the attached file, select the name of the original project (for example, trafficreporter) from the Alternate entry point for drop-down list. Also specify the arguments that would launch the application using this alternate entry point (for example: gui).
   6. Modify the main() method of the original project as follows:

      public static void main(String[] args) {
           if ( args != null && args.length > 0 && args[0].equals("gui") ){
                // code to initialize the app
                theApp.enterEventDispatcher();
           } else {
                // code to launch the background thread }
           }
      }
   7. Add your application icon file to the this new entry point application and make it the ribbon icon.

The entry point application now consists only of an application icon and a parameter to pass to the main() method of the main application. There is no source code associated with this project. The main application contains all of the source code, including the thread to be started automatically.

Now, whenever the device is started, this main() method will be executed without any arguments, and the background thread will start. When the application icon is clicked from the main ribbon, the main() method will be executed with the argument specified in the above code sample ("gui") and the application can pop a screen to the foreground.

[1] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800901/How_To_-_Configure_an_application_to_start_automatically_when_the_device_is_turned_on.html?nodeid=800920&vernum=0
[2] http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/796557/800738/800901/How_To_-_Setup_an_alternate_entry_point_for_my_application.html?nodeid=800820


  • Copyright © 1996-2010 vaks.in. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress