定时器Timer实时修改时间间隔(周期)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.定时器Timer当时间间隔(周期)变化时,实时去修改
我项目中主要是实现在某个时间段上午8:00-12:00,下午
2:00(pm_start)-19:00(pm_end),每隔3分钟(pm_time)(可以手动设置)自动上传当前的位置(google的定位)
// 执行定时任务
privateboolean bool= true;// true表示服务器与本地数据相同,false表示服务器与本地数据不相同
privatevoid start_schedule_pm() {
final Timer timer = new Timer();
timerTask = new TimerTask() {
@Override
publicvoid run() {
//当不相同时取消timer重新new一个timer
if (!bool) {
if (timer != null) {
Log.e("%%%%", bool + "");
timerTask.cancel();
timer.cancel();
start_schedule_pm();
bool = true;
return;
}
}
if ((getCurrentTime() - 12) >=
Double.valueOf(pm_end)) {
timerTask.cancel();
timer.cancel();
//我的是在android service里跑的程序,所以关闭了service
stopSelf();
return;
}
if
(!AppUtils.checkNet(getApplicationContext())) {
Log.d("data", "网络未连接");
return;
}
Log.d("data", "新任务开始");
if (location != null) {
if ((getCurrentTime() -
12) >Double.valueOf(pm_start)) {
//这里需要handler来实现,否则报Can't create handler inside thread that has not called Looper.prepare()
mHandler.sendEmptyMessage(1);
}
}
mHandler.sendEmptyMessage(2);
}
};
timer.schedule(timerTask, 0, Long.valueOf(pm_time) * 60 * 1000);
}
Handler mHandler = new Handler() {
publicvoid handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
//google定位服务
onLocationChanged(location);
// getSqlData();
//获取服务器数据并与本地数据相比较,如果不相同update本地数据库,bool=false
getSetTime();
break;
case 2:
locationManager.requestLocationUpdates(provider, 30 * 1000, 0,
LocationService.this);
break;
default:
break;
}
}
};
//google定位服务即获取当前的location需要
implements LocationListener
locationManager = (LocationManager)
getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider =
locationManager.getBestProvider(criteria, true);
location= locationManager.getLastKnownLocation(provider);
publicvoid onLocationChanged(Location location) { // 获得当前位置的纬度
latitude = location.getLatitude();
// 获得当前位置的经度
longitude = location.getLongitude();
Log.e("经纬度分别为:",
Calendar.getInstance().getTime() + "longitude="
+ longitude + "latitude" + latitude);
// 获取当时的时间(24小时制)
SimpleDateFormatsDateFormat =
new SimpleDateFormat(
"yyyy-MM-ddHH:mm:ss");
time = sDateFormat.format(new Date()); //把数据上传到服务器
isPositionAvailable();
}