Notifications are another new feature in MIDP 3 for which there is some usefully equivalent functionality in Android, namely Notifications ! or more specifically
android.app.Notification
and
android.app.NotificationManager
Below is a very simplistic MIDlet which demonstrates the basic use of Notifications. Of course, in reality a MIDlet would actually be doing something which would cause it emit Notifications. In the case of the Missed Call Notification type that I am using in the example, it might be doing some actual telephony, although that is a bit unlikely since as far as I am aware neither JSR 253 nor 304 have ever been shipped. Anyway, here’s the MIDlet
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Notification;
import javax.microedition.lcdui.NotificationListener;
import javax.microedition.lcdui.NotificationType;
import javax.microedition.midlet.MIDlet;
public final class SimpleNotificationMIDlet
extends
MIDlet
implements
NotificationListener,
Runnable
{
public void destroyApp(boolean ignore)
{
}
public void startApp()
{
primaryDisplay = Display.getDisplays(0)[0];
new Thread(this).start();
}
//
public void notificationDismissed(Notification theNotification)
{
primaryDisplay.setCurrent(new Alert("Notification Dismissed", null, null, AlertType.INFO));
}
public void notificationSelected(Notification theNotification)
{
primaryDisplay.setCurrent(new Alert("Notification Selected", null, null, AlertType.INFO));
}
public void notificationTimeout(Notification theNotification)
{
primaryDisplay.setCurrent(new Alert("Notification Timeout", null, null, AlertType.INFO));
}
public void run()
{
try
{
missedCall("+44 1234567890");
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void missedCall(String theCaller)
{
Notification n = new Notification(NotificationType.CALL);
n.setListener(this);
n.setLabel("Missed call from " + theCaller);
n.post(true, 60000);
}
//
private Display primaryDisplay;
}
Here’s the Notification immediately after it has been posted. For a couple of seconds it takes over the entire status bar.
Here’s the Notification once the status bar re-appears. For the misleadingly named Call NotificationType, which is actually the Missed Call NotificationType, I am using the generic Missed Call icon as shipped with Android.
Here’s the expanded view which is shown when the status bar is pulled down
And that’s it really. At this point the user can either click on the Notification or ignore it, and a MIDlet can either update the Notification or remove it.
In the example MIDlet, if you select the Notification in the expanded view, this happens
If you hit the clear button in the expanded view, this happens
If you just sit and wait then eventually this happens.
There is one feature of Android Notifications which is not demonstrated above, and that is the ability to associate a number with a Notification, in which case you get this
There is no API for doing this in MIDP 3, but the specification does explicitly permit an implementation to group together Notifications of the same type. so in theory a single Android Notification could be used to represent a number of MIDP 3 Notifications, with the number of Notifications being displayed in the icon, as above.
In practice there is no way for the implementation to know the intended semantics of any single MIDP 3 Notification and consequently whether it would be appropriate to group it with other Notifications of ostensibly the same type, or whether doing so is simply going to end-up badly confusing the user. There is also an issue with how to handle the display of a group of MIDP 3 Notifications in the expanded view of a single Android Notification. Although the view is customizable this is done using something RemoteViews which have fairly circumscribed functionality.
Copyright (c) 2010 By Simon Lewis. All Rights Reserved.
Leave a Reply