您现在的位置: J2ME开发网 >> Java技术 >> 厂商开发 >> 索尼爱立信 >> 文章正文
中断Java ME手机上的屏幕保护程序
作者:mingjava    文章来源:本站原创    点击数:    更新时间:2007-5-14

如果你的应用程序不要求用户连续按键,那么在SonyEricsson的手机上运行的程序,可能一段时间之后就会出现屏幕保护界面,这是手机自带的功能。但是我们可以通过Nokia UI API来设置背景灯来阻止屏幕保护界面。但是持续让背景灯打开会消耗更多的电量。

请注意:对于UIQ3的手机,例如W950 M600等,可以从控制面板来禁止屏幕保护程序,因此Nokia UI API不再适合。

还需要注意的是由于我们并非在程序中禁止屏幕保护程序,而是中断其运行。因此要在循环中不停的调用setLights()方法。

DeviceControl.setLights(0, 100);  

下面是一个案例

import com.nokia.mid.ui.DeviceControl;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class BacklightWorkaround extends MIDlet {
 
  private SimpleCanvas canvas;
 
  /**
   * Keeps the backlight on by repeatedly setting
   */
  class LightThread extends Thread {
    public void run() {
      while(true){
       
        DeviceControl.setLights(0, 100);       
        try {
          Thread.sleep(5000);
        } catch (InterruptedException ex) {
          ex.printStackTrace();
        }
      }
    }
  }
 
  private class SimpleCanvas extends Canvas implements CommandListener{
    private Command exitCmd;
    private MIDlet midlet;
   
    public SimpleCanvas(MIDlet midlet) {
      this.midlet = midlet;
      exitCmd = new Command("Exit",Command.EXIT, 1);
      addCommand(exitCmd);
      setCommandListener(this);
    }
    public void paint(Graphics g) {     
      g.drawString("Let there be light.", 0, 0, Graphics.LEFT|Graphics.TOP);
    }

    public void commandAction(Command command, Displayable displayable) {
      if(command == exitCmd){
        midlet.notifyDestroyed();
      }
    }
  }
 
  public void startApp() {
    if(canvas == null){
      canvas = new SimpleCanvas(this);
      new LightThread().start();
    }
   
    Display.getDisplay(this).setCurrent(canvas);
  }
 
  public void pauseApp() { }
 
  public void destroyApp(boolean unconditional) { }
}