Symbian
Symbian OS Library

FAQ-1206 Can I launch a MIDlet from a native application?

[Index][spacer] [Previous] [Next]



 

Classification: Java Category: J2ME MIDP 2.0
Created: 01/12/2005 Modified: 01/17/2005
Number: FAQ-1206
Platform: Not Applicable

Question:
Can I launch a MIDlet from a native application?

Answer:
Yes, this can be achieved by means of the MIDP 2.0 Push Registry.

    The MIDlet must register itself with the Push Registry in order to be auto-launched in response to an incoming connection. For example for a MIDlet to be launched in response to an incoming socket connection on port 1234, the MIDlet suite would include the following entry in the Application Descriptor (JAD) file
    MIDlet-Push-1: socket://:1234, MyMIDlet, *
      This tells the MIDP Application Management System to auto-launch the MIDlet (whose MIDlet class is MyMIDlet) in response to an incoming socket connection on port 1234, originating from any IP address (* represents the wildcard address). The startApp method contained in the MyMIDlet class may look something like this:
      public void startApp() {
      ...
      new Thread(){
      public void run(){
      try {
      ssc = (ServerSocketConnection)Connector.open("socket://:1234");
      SocketConnection sc = (SocketConnection)ssc.acceptAndOpen();
      DataInputStream is = sc.openDataInputStream();
      ...
      }catch(Exception e){
      //Handle
      }
      }
      }.start();
      ...
      display.setCurrent(messageView);
      }
        Note in line with good MIDP programming practice, handling the incoming connection should be performed in a new Thread to avoid blocking the MIDP System Event Dispatcher.


        So to launch the MIDlet the C++ application simply opens a client socket connection on the local host address (127.0.0.1) and (for this example) port 1234.

        Also see FAQ-1198