gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:37 26 4
gpt4 key购买 nike

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

伪代码

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

  2. 应用在充电时持续播放声音

    不能让它在中间没有间隙的情况下循环播放,而是播放声音

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

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

通过查看文档,我认为没有听众告诉您电池电量是否为 100%。

编辑:找到了通过 batteryStatusChange 的方法,感谢 Nate 帮助我解决问题

有空异常错误。

编辑:使用了 InputStream 且不再出现空异常错误。将 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;
}

最佳答案

我需要更清楚地说明您希望该应用程序如何工作(请参阅我在您的问题下方的评论),但我很确定您将需要实现 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 中的另一个回调。

关于java - 根据电池是否正在充电来启动和关闭应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12440396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com