Symbian
Symbian OS Library

FAQ-1198 Can I access native functionality from a MIDlet?

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



 

Classification: Java Category: J2ME MIDP
Created: 12/21/2004 Modified: 04/29/2005
Number: FAQ-1198
Platform: Not Applicable

Question:
Can I access native functionality from a MIDlet?

Answer:
Not directly since MIDP does not support JNI.

    However, it is possible for a MIDlet to communicate with a C++ application running on the host device using a standard communication protocol such as TCP/IP sockets.

    For instance the native application can provide a (server) socket listening for incoming connections on a specific port (say 1234). The MIDlet can then use the GCF to opens a client socket connection using the local loopback address to communicate with the native application as follows:

    SocketConnection mySocket = (SocketConnection) Connector.open("socket://127.0.0.1:1234");

    Once a two way connection has been established the MIDlet client can make requests for data from the native server using a custom protocol understood by both.

    Of course this approach relinquishes many of the tradition strengths of MIDP (such as cross platform portability) requiring as it does the implementation, installation and launching of a dedicated native application as well as the MIDlet. However it may provide a route for application developers to leverage existing Java code to a Java implementation with different capabilities, rather than undertake a complete re-write in C++.

    For further information see:
      http://www.symbian.com/developer/techlib/papers/java_MIDP.asp
      "Extending the Reach of MIDlets: how MIDlets can access native services"
      and
      http://midpjni.com/

        Also see FAQ-1206