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