Transcript MIDP
MIDP
Mobile Information
Device Profile
Johnny Yau
CIS 642
Prof. Insup Lee
Introduction
MIDP = Mobile Information Device
Profile
Spearheaded by Sun, Motorola, and
Nokia
Latest attempt by Sun to bring JAVA
into embedded systems, specifically
mobile phone
Motivation Behind MIDP
Heterogeneous development
platforms in mobile phone arena
Short product life cycles
MIDP attempts to solve that via
offering a standard environment for
application programmers
What is MIDP?
Set of JAVA APIs
Implements a MIDlet class
Addresses issues such as user
interface, persistent storage,
networking, and application model
Targeted towards mobile phones
Basically JAVA for mobile phones
Implementation
Stacked on top of Connected Limited
Device Configuration (CLDC) and
KVM
Implementation (cont)
Operates over existing network
protocols such as IrDA, Bluetooth,
IEEE 802.11, and wireless networks
Specifications are targeted towards
mobile phones
Other devices such as PDAs may
find more use in a super set of the
MIDP APIs
Service Model
Retrieval
Medium Verification
Figure out which communication device
to use (e.g. Bluetooth or IEEE 802.11)
Negotiations
Negotiations
Server and mobile device exchange
information about the MIDlet and
mobile device, respectively
Information such as device
capabilities (e.g. processing power,
volatile memory available), device
size, MIDlet requirements may be
exchanged
Negotiations (cont)
Crux of the useful capabilities
offered by MIDP
Especially important when it comes
to making things work over devices
with different sized screens and
different capabilities
Installation
Download
Security Verification
Check that the MIDlet does not violate
security issues
Transformation
Convert public representation to
internal representation
Launch
When selected by user application is
moved into KVM and run
Upgrade & Removal
Applications can be upgraded when
new versions become available
An application permanently stored
locally on device can be removed
from persistent storage when
selected for removal by user
Provided by Mobile Device
Classes and native code that
implements CLDC
JAVA Virtual Machine (KVM)
Native code for the MIDP
Provided by JVM & CLDC
Multi-threading
Locking
Synchronization
Execution of byte code
Method dispatching
MIDlet Class
All MIDP applications MUST inherit
from the MIDlet class
Does not have a main() function
Cannot call System.exit()
It triggers a SecurityException to be
thrown
JAVA Packages
java.lang.*
java.io.*
java.util.*
javax.microedition.io.*
javax.microedition.ui.*
javax.microedition.rms.*
javax.microedition.midlet.*
javax.microedition.io
StreamConnection
To open a basic connection that
reads/writes simple data.
ContentConnection
To open a connection that provides
content length, type, and encoding
information. This interface extends
from the StreamConnection interface.
javax.microedition.io
HttpConnection
To open a connection that provides
capabilities to interface through HTTP
including getting/setting headers and
HTTP-specific handling. This interface
extends from the
ContentConnectioninterface.
javax.microedition.ui
Offers two major choices in interface
design
Canvas
Used to construct a custom interface
using the Graphics object
Mainly used for multithreaded games or
non-traditional interfaces
javax.microedition.ui
Screen
For the construction of form based user
interfaces
javax.microedition.rms
Contains the classes needed to
implement a temporary storage
database on the device
Limited in capabilities because of the
restrictions imposed by mobile
phones
javax.microedition.midlet
MIDlet
Used to build MIDP applications
Hello World MIDlet
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloMidlet extends MIDlet implements CommandListener
{
// Initialize the Midlet Display variable
private Display midletDisplay;
// Initialize a variable for the doneCommand
private Command doneCommand;
public HelloMidlet()
{
// Retrieve the display from the static display object
midletDisplay = Display.getDisplay(this);
}
// Initialize the doneCommand
doneCommand = new Command("DONE", Command.SCREEN, 1);
/**
* Create the Hello Midlet World TextBox and associate
* the exit command and listener.
*/
public void startApp()
{
// Create the TextBox containing the "Hello Midlet World!!" message
TextBox textBox = new TextBox("Hello Midlet", "Hello Midlet World!!", 256, 0);
// Add the done Command to the TextBox
textBox.addCommand(doneCommand);
// Set the command listener for the textbox to the current midlet
textBox.setCommandListener( (CommandListener) this);
}
// Set the current display of the midlet to the textBox screen
midletDisplay.setCurrent(textBox);
/**
* PauseApp is used to suspend background activities and release
* resources on the device when the midlet is not active.
*/
public void pauseApp()
{
}
/**
* DestroyApp is used to stop background activities and release
* resources on the device when the midlet is at the end of its
* life cycle.
*/
public void destroyApp(boolean unconditional)
{
}
/*
* The commandAction method is implemented by this midlet to
* satisfy the CommandListener interface and handle the done action.
*/
public void commandAction(Command command, Displayable screen)
{
// If the command is the doneCommand
if (command == doneCommand)
{
// Call the destroyApp method
destroyApp(false);
}
}
}
// Notify the midlet platform that the midlet has completed
notifyDestroyed();
Screenshot
Development Cycle
Write application using MIDP APIs
Compile
Pre-verify
Pre-processes the class for use in KVM
Test
Package classes into a .jar file
Test with Package
Hits
Simpler development
Runs on acceptably well on
heterogeneous platforms
Misses
Too bloated really for mobile phones
Not powerful enough for devices like
PDAs and Wireless Internet
Appliances that have more resources
available
Though a superset of the APIs may
work fine