1、建ProviderQueryUI類
2、入必要的類
package com.nokia.example.location.tourist.ui;
import Javax.microedition.lcdui.Alert;
import Javax.microedition.lcdui.AlertType;
import Javax.microedition.lcdui.Command;
import Javax.microedition.lcdui.CommandListener;
import Javax.microedition.lcdui.Displayable;
import Javax.microedition.lcdui.Form;
import Javax.microedition.lcdui.StringItem;
import com.nokia.example.location.tourist.TouristMIDlet;
3、建ProviderQueryUI類,並定義類、常量和命令。
/**
* VIEwer class that is responsible for all the UI actions when the application
* is seaching for the location provider.
*/
public class ProviderQueryUI
{
/** Status information Form */
private Form searchForm = new Form("Seaching location provider...");
/** StringItem showing the current status. */
private StringItem infoItem = new StringItem("Status:", "");
/** Provider cost selection command - Yes. */
private Command yesCmd = new Command("Yes", Command.OK, 1);
/** Provider cost selection command - No. */
private Command noCmd = new Command("No", Command.STOP, 1);
/** A boolean indicating may user allow location provider cost. */
private boolean result = false;
private static final String COST_QUERY_MESSAGE = "Cost free location providers
can not be found. Do you with continue "
+ "search with providers that cost?";
private static final String OUT_OF_SERVICE_MESSAGE = "All Location providers
are currently out of service. Please unsure "
+ "that location-providing module is properly connected.";
private static final String SEACHING_FREE_PROVIDERS = "Seaching for free
location providers.";
private static final String SEACHING_COST_PROVIDERS = "Seaching for providers
that may cost.";
private static final String NOT_FOUND_MESSAGE = "Try again after locationproviding
module is properly connected.";
private static final String NO_FREE_SERVICE_SERVICE_MESSAGE = "Cost free
location providers can not be found. Please ensure "
+ "that location-providing module is properly connected.";
4、建類結構
/**
* Construct the UI with default values.
*/
public ProviderQueryUI()
{
infoItem.setText(SEACHING_FREE_PROVIDERS);
searchForm.append(infoItem);
}
5、建方法,顯示“無法提供服務”和“沒有免費的定位服務”信息。
/**
* Show out of service error message.
*/
public void showOutOfService()
{
Alert alert = new Alert("Error", OUT_OF_SERVICE_MESSAGE, null,
AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
TouristMIDlet.getDisplay().setCurrent(alert, searchForm);
infoItem.setText(NOT_FOUND_MESSAGE);
}
/**
* Show no cost free location provider found error message.
*/
public void showNoFreeServiceFound()
{
Alert alert = new Alert("Error", NO_FREE_SERVICE_SERVICE_MESSAGE, null,
AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
TouristMIDlet.getDisplay().setCurrent(alert, searchForm);
infoItem.setText(NOT_FOUND_MESSAGE);
}
6、建方法,詢問用戶使用定位服務的費用。
/**
* Query the user whether the use of location provider may cost. The use of
* this method is locked with synchronized keyWord, so only one thread can
* Access this method at once.
*
* @return a boolean indicating may user allow location provider cost.
*/
public synchronized boolean confirmCostProvider()
{
Alert alert = new Alert("Confimnation", COST_QUERY_MESSAGE, null,
AlertType.CONFIRMATION);
alert.addCommand(yesCmd);
alert.addCommand(noCmd);
alert.setTimeout(Alert.FOREVER);
// Set the monitoring object to be this instance.
final ProviderQueryUI hinstance = this;
// Add a CommandLister as anomynous inner class
alert.setCommandListener(new CommandListener()
{
/*
* Event indicating when a command button is pressed.
*
* @see Javax.microedition.lcdui.CommandListener#commandAction
(Javax.microedition.lcdui.Command,
* Javax.microedition.lcdui.Displayable)
*/
public void commandAction(Command command, Displayable d)
{
if (command == yesCmd)
{
infoItem.setText(SEACHING_COST_PROVIDERS);
result = true;
synchronized (hinstance)
{
// Wake up the monitoring object
hinstance.notifyAll();
}
}
else if (command == noCmd)
{
result = false;
infoItem.setText(NOT_FOUND_MESSAGE);
synchronized (hinstance)
{
// Wake up the monitoring object
hinstance.notifyAll();
}
}
}
});
TouristMIDlet.getDisplay().setCurrent(alert, searchForm);
// Wait indefinitely for notification.
try
{
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
TouristMIDlet.getDisplay().setCurrent(searchForm);
return result;
}