根据电池是否正在充电,启动和关闭应用程序

时间:2012-09-15 19:41:52

标签: java eclipse blackberry

我想创建一个简单的Blackberry应用程序,每当我为手机充电时播放音频文件,并在我拔下电源时关闭应用程序。

伪代码

  1. 插入电池线时启动应用程序,

  2. 应用程序在充电时连续播放声音

    无法在没有间隙的情况下使其循环,而是播放声音

  3. 如果用户拔下电缆,停止播放,播放声音,停止播放

  4. 可选:如果电池电量下降到关键/完成充电,播放声音

  5. 通过文档查看我认为没有听众可以告诉你电池是否达到100%。

    编辑:找到一条通过batteryStatusChange的方式,并感谢Nate帮助我

    有空的异常错误。

    编辑:使用InputStream,不再有null异常错误。将wav文件添加到res文件夹。下面的新代码以100和两种不同的声音播放声音,一个用于USB连接,另一个用于USB断开。

    public class HelloBlackBerryScreen extends MainScreen implements SystemListener2 {
        private BasicEditField basicEditField;
        private Player HEV;    
        private String wav;
        private InputStream stream;
        private int volume; //going to set volume from GUI using a drop down list, working on it currently
    
    public HelloBlackBerryScreen() 
    {
        super( MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR );
        setTitle( "HelloBlackBerry" );
        add(new RichTextField("Battery", RichTextField.TEXT_ALIGN_HCENTER));
    
        Application.getApplication().addSystemListener(this);
    
        wav = "voice_on.wav";
        stream = (InputStream)this.getClass().getResourceAsStream("/" + wav);               
        try {
            HEV = Manager.createPlayer(stream, "audio/wav");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MediaException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public void batteryGood() {
        // TODO Auto-generated method stub
    
    }
    
    public void batteryLow() {
        // TODO Auto-generated method stub
    
    }
    
    public void batteryStatusChange(int status) 
    {
        // TODO Auto-generated method stub
        if ((status & DeviceInfo.BSTAT_LEVEL_CHANGED) != 0)
        {
            if(DeviceInfo.getBatteryLevel() == 100)
            {
                try 
                {
                    setWav("power_level_is_100_percent.wav"); 
                    HEV.start();
                    stream.close();
                } 
                catch (MediaException e) 
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
                catch (IOException e) 
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }               
    
            }               
    
        }
    }   
    
    public void powerOff() {
        // TODO Auto-generated method stub
    
    }
    
    public void powerUp() {
        // TODO Auto-generated method stub
    
    }
    
    public void backlightStateChange(boolean on) {
        // TODO Auto-generated method stub
    
    }
    
    public void cradleMismatch(boolean mismatch) {
        // TODO Auto-generated method stub
    
    }
    
    public void fastReset() {
        // TODO Auto-generated method stub
    
    }
    
    public void powerOffRequested(int reason) {
        // TODO Auto-generated method stub
    
    }
    
    public void usbConnectionStateChange(int state) 
    {
        // TODO Auto-generated method stub
        if (state == USB_STATE_CABLE_CONNECTED) 
        {           
            try 
            {
                setWav("suitchargeok1.wav"); 
                HEV.start();
                stream.close();
            } 
            catch (MediaException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       
    
            } 
            else if (state == USB_STATE_CABLE_DISCONNECTED) 
            {
                try 
                {
                    stream.close();
                    setWav("battery_pickup.wav"); 
                    HEV.start();
                    stream.close();
                } catch (MediaException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();                    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
            }
    }
    
    public String getWav() {
        return wav;
    }
    
    public void setWav(String wav) {
        this.wav = wav;
        stream = (InputStream)this.getClass().getResourceAsStream("/" + this.wav);
        try {
            HEV = Manager.createPlayer(stream, "audio/wav");
            HEV.realize();
            VolumeControl volume = (VolumeControl) HEV.getControl("VolumeControl");
            volume.setLevel(25);
            HEV.prefetch();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MediaException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    public boolean onClose()
    {
        UiApplication.getUiApplication().requestBackground();
        return true;
    }
    

    }

1 个答案:

答案 0 :(得分:2)

我需要进一步澄清你希望应用程序如何工作(请参阅我在你的问题下面的评论),但我很确定你需要实现一个SystemListener(实际上,SystemListener2,是一种SystemListener来监听USB状态变化。

这样可以检测连接:

void usbConnectionStateChange(int state) {
   if (state == USB_STATE_CABLE_CONNECTED) {
      // start playing your sound
   } else if (state == USB_STATE_CABLE_DISCONNECTED) {
      // stop playing your sound, and exit, or just stay in the background
   }
}

Here is a link on how to add/register a System Listener on device startup

See this BlackBerry forums link on detecting USB connection

And the API docs on SystemListener2, too

更新,因为我相信海报已经找到了(基于问题中的代码更新),public void batteryStatusChange(int status)方法可能是在这里使用的更直接的回调。但是,其他一切都是相同的,因为这只是SystemListener中的另一个回调。