后台运行的程序(Application)没有窗口(Screen),也就无法显示提示窗口(Dialog),使用下面的代码可以让后台程序在桌面显示提示信息,并在5秒钟后或按任意键后自动消失。
首先,在需要提示的地方,加入如下代码
synchronized (Application.getEventLock())
{
Screen screen=new GlobalDialogScreen("Something text showing on HomeScreen");
Ui.getUiEngine().pushGlobalScreen(screen, 1, UiEngine.GLOBAL_QUEUE);
}
其次,新建一个PopScreen窗口类
package code;
import java.util.Timer;
import java.util.TimerTask;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.Ui;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.HorizontalFieldManager;
import net.rim.device.api.ui.container.PopupScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
public class GlobalDialogScreen extends PopupScreen
{
public GlobalDialogScreen(String msg)
{
super(new VerticalFieldManager(),Field.FOCUSABLE);
HorizontalFieldManager hfm=new HorizontalFieldManager();
hfm.add(new BitmapField(Bitmap.getPredefinedBitmap(Bitmap.INFORMATION)));
hfm.add(new LabelField(msg));
add(hfm);
Timer timer=new Timer();
TimerTask timerTask;
timerTask=new TimerTask() {
public void run() {
getApplication().invokeAndWait(new Runnable() {
public void run() {
closeScreen();
}
});
}
};
timer.schedule(timerTask, 5000);
}
private void closeScreen()
{
Ui.getUiEngine().popScreen(this);
}
public boolean keyChar(char key, int status, int time)
{
Ui.getUiEngine().popScreen(this);
return true;
}
}
发现bug,如果按键盘任意键关闭窗口,TimerTask继续运行,最后导致NullPointerException,还是取消按任意键关闭窗口吧