Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry 电池电量达到10时启动/取消计时器_Blackberry_Timer_Timertask_Recurring - Fatal编程技术网

Blackberry 电池电量达到10时启动/取消计时器

Blackberry 电池电量达到10时启动/取消计时器,blackberry,timer,timertask,recurring,Blackberry,Timer,Timertask,Recurring,我正在开发一款黑莓应用程序,当电池电量达到10%时,它会向服务器发送一条消息。这是通过调用构造函数中的getBatteryStatus()方法实现的,其中getBatteryStatus()执行以下操作: 公共静态void getBatteryStatus(){ timerBattery=新计时器(); taskBattery=新的TimerTask(){ 公开募捐{ UiApplication.getUiApplication().invokeLater(新的Runnable()){ 公开募捐

我正在开发一款黑莓应用程序,当电池电量达到10%时,它会向服务器发送一条消息。这是通过调用构造函数中的
getBatteryStatus()
方法实现的,其中
getBatteryStatus()
执行以下操作:

公共静态void getBatteryStatus(){
timerBattery=新计时器();
taskBattery=新的TimerTask(){
公开募捐{
UiApplication.getUiApplication().invokeLater(新的Runnable()){
公开募捐{
如果(DeviceInfo.getBatteryLevel()==10){
试一试{
String freeText=“电池电量为10%”;
sendBatteryStatus(自由文本);
}捕获(例外e){}
}
}
});
}
};
timerBattery.scheduleAtFixedRate(taskBattery,0,20000);
}
sendBatteryStatus
将消息发送到服务器并取消计时器。这实际上已按请求将消息发送到服务器一次

但是,如果用户开始在应用程序正常运行的情况下为其手机充电(没有再次调用构造函数),该怎么办?计时器将如何重新启动?下次我如何才能再次将邮件发送到服务器

防止发送多条电池电量为10%的消息,并在下次电池电量为10%时仅发送一次消息,然后再次发送消息的最佳机制是什么


如果邮件发送后我不取消计时器,则发送到服务器的邮件将不止一次。

我实际上认为,如果您完全取消计时器,您会过得更好。我不认为计时器能有效地为你提供你想要的一切

幸运的是,黑莓有这个界面。这样实施:

公共最终类BatteryListener实现SystemListener{
/**上次通知我们的电池电量*/
private int_lastLevel=0;
/**发送事件的电池百分比*/
私有整数_阈值=10;
公共BatteryListener(){
Application.getApplication().addSystemListener(此);
}
公共无效设置阈值(int值){
_阈值=数值;
}
/**调用此按钮可停止监听电池状态*/
公营部门{
Application.getApplication().removeSystemListener(此);
}
私有布尔级别已更改(int状态){
return(status&DeviceInfo.BSTAT\u LEVEL\u CHANGED)=DeviceInfo.BSTAT\u LEVEL\u CHANGED;
}
公共无效电池状态更改(int状态){
如果(级别更改(状态)){
int newLevel=DeviceInfo.getBatteryLevel();
如果(新级别_阈值){
//我们刚刚跨过门槛,电池电量耗尽
sendBatteryStatus(“电池电量处于”+
新整数(newLevel)+“%!”;
}
_lastLevel=newLevel;
}
}
public void batteryGood(){/**无事可做*/}
public void batteryLow(){/**无事可做*/}
public void powerOff(){/**无事可做*/}
public void powerUp(){/**无事可做*/}
}
然后,只要你想让你的应用程序启动为你监控电池,你就可以创建并保留这个类的一个实例。如果电池电量降至10%,它将发送一条消息。如果用户稍后再次开始充电,然后停止充电,并再次消耗超过10%,则将发送另一条服务器消息

私人电池监听程序;

listener=new BatteryListener();//开始监控
显然,在上面的类中,您必须向该类添加
sendBatteryStatus()
方法,或者向该类传递一个实现
sendBatteryStatus()方法的对象

注意:我还建议您不要在主线程上向服务器发送通知。您没有显示
sendBatteryStatus()
的实现,因此可能已经显示了。但如果没有,请使用后台线程通知服务器,这样UI就不会冻结