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