此方法針對於無法自動獲取網絡時間的特殊設備,正常 Android 設備直接調用
System.currentTimeMillis();
方法獲取當前時間即可。
TimeService 集成於 Service,實現與主Activity 的生命周期綁定。
TimeService 代碼
public class TimeService extends Service {
private TimeService mContext;
private Timer mTimer;//定時器
private long currentTimeMillis = 0;//當前時間
private static final long UPDATE_TIME_OFFSET = 1 * 1000;//自動更新間隔
private CheckTimeTask checkTimeTask;
private UpdateTimeTask updateTimeTask;
//需用內部類繼承Binder,並定義方法獲取Service對象
private final IBinder binder = new TimeBinder();
//外部調用,獲取當前時間
public long getCurrentTimeMillis() {
return currentTimeMillis;
}
//初始化服務時間
public void setCurrentTimeMillis(String dateStr) {
if (StringUtil.isNullOrEmpty(dateStr)) {
return;
}
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(dateStr);
currentTimeMillis = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
}
public class TimeBinder extends Binder {
public TimeService getService() {
return mContext;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public void onCreate() {
super.onCreate();
mContext = this;
initData();
}
private void initData() {
mTimer = new Timer();
checkTimeTask = new CheckTimeTask();
updateTimeTask = new UpdateTimeTask(UPDATE_TIME_OFFSET);
mTimer.schedule(checkTimeTask, 1000, 5 * 60 * 1000);//每5分鍾更新一次網絡時間
mTimer.schedule(updateTimeTask, 0, UPDATE_TIME_OFFSET);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
if (checkTimeTask != null) {
checkTimeTask.cancel();
checkTimeTask = null;
}
if (updateTimeTask != null) {
updateTimeTask.cancel();
updateTimeTask = null;
}
}
/**
* 獲取服務器時間
*/
private class CheckTimeTask extends TimerTask {
@Override
public void run() {
//=========此處為獲取網絡時間請求========
//===============================
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (bean != null ) {
String dateStr = bean;
try {
Date date = sdf.parse(dateStr);
currentTimeMillis = date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
/**
* 定時更新當前時間
*/
private class UpdateTimeTask extends TimerTask {
/**
* 更新時間間隔
*/
private long offset = 0;
public UpdateTimeTask(long offset) {
this.offset = offset;
}
@Override
public void run() {
currentTimeMillis += offset;
}
}
}
