获取系统时间并随时更新系统时间

来源:互联网 发布:淘宝网店数据分析 编辑:程序博客网 时间:2024/05/01 18:38
<span style="font-family:SimSun;"><span style="font-size:18px;"></span></span><pre name="code" class="java"><pre name="code" class="java"><span style="font-size: 18px; "><span style="font-family:SimSun;">一种:直接使用Handler和Thread去实现</span></span>
<span style="font-size: 18px; "><span style="font-family:SimSun;">Handler:</span></span>
<span style="font-family:SimSun;font-size:18px;">class TimeHander extends Handler {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1:// 获取当前时间是12小时制还是24小时制ContentResolver cv = getApplicationContext().getContentResolver();String strTimeFormat = android.provider.Settings.System.getString(cv,android.provider.Settings.System.TIME_12_24);// 获取当前系统时间c = Calendar.getInstance();hour = c.get(Calendar.HOUR_OF_DAY);minute = c.get(Calendar.MINUTE);if (strTimeFormat.equals("24")) {Log.i("activity", "24");if (minute < 10)tView.setText("时间:" + hour + ":" + "0" + minute);else {tView.setText("时间:" + hour + ":" + minute);}}if (strTimeFormat.equals("12")) {Log.i("activity", "12");String amPmValues;if (c.get(Calendar.AM_PM) == 0) {amPmValues = "AM";} else {amPmValues = "PM";}if (minute < 10)tView.setText("时间:" + hour + ":" + "0" + minute+ amPmValues);else {tView.setText("时间:" + hour + ":" + minute + amPmValues);}}monitorBatteryState();break;}}}</span>
<span style="font-family:SimSun;font-size:18px;">开启一个线程每隔1S发送一个消息:</span>
<span style="font-family:SimSun;font-size:18px;"></span><pre name="code" class="java"><span style="font-family:SimSun;">class TimeThread extends Thread {@Overridepublic void run() {do {try {Thread.sleep(1000);Message msg = new Message();msg.what = 1; // 消息(一个整型值)hander.sendMessage(msg);// 每隔1秒发送一个msg给mHandler} catch (InterruptedException e) {e.printStackTrace();}} while (true);}}</span>
如果只是使用Handler和Thread来实现的话,会存在只发送一个消息到Handler,这个时候我们就得想办法去解决类似于定时发送器的作用:那么使用do{}while
<span style="font-family:SimSun;font-size:18px;">这样就可以实现简单的获取系统时间并随时更新的目的</span>
<span style="font-family:SimSun;font-size:18px;">第二种使用一个BroadcastReceiver和Service来实现</span>
<span style="font-family:SimSun;font-size:18px;">作为Android的四大组件,在做一些东西的时候,用该去多考虑一下,并不是说要效果就好,应该是怎么做最合理化。</span>
<span style="font-family:SimSun;font-size:18px;">在MainActivity中:</span>
<span style="font-family:SimSun;font-size:18px;">首先创建一个广播和服务</span>
<span style="font-family:SimSun;font-size:18px;">然后:在MainActivity中注册广播,当然注册广播的是可以在XML中注册也可以在代码中注册,这个根据情况而定,一般是在Activity中去注册,这个当Activity被销毁时,广播也可以跟随者去被注销:</span>
<span style="font-family:SimSun;font-size:18px;"></span><pre name="code" class="java"><span style="white-space:pre"></span>@Overrideprotected void onResume() {super.onResume();registerBroadcastReceiver();//注册广播}@Overrideprotected void onPause() {super.onPause();unregisterReceiver(receiver);//注销广播}/** * 注册广播 */private void registerBroadcastReceiver() {receiver = new UITimeReceiver();IntentFilter filter = new IntentFilter(TIME_CHANGED_ACTION);registerReceiver(receiver, filter);}
接着去启动一个服务:
<span style="font-family:SimSun;font-size:18px;"></span><pre name="code" class="java"><span style="white-space:pre"></span>/** * 启动服务 */private void startTimeService() {timeService = new Intent(MainActivity.this, TimeService.class);this.startService(timeService);}@Override    <span style="white-space:pre"></span>  protected void onDestroy() {          super.onDestroy();          //停止服务           stopService(timeService);         }  
在Service中:
<span style="font-family:SimSun;font-size:18px;"></span><pre name="code" class="html">public class TimeService extends Service {private int hour;private int minute;private Calendar c;private Intent intent;private Bundle bundle;private Timer timer;public void onCreate() {c = Calendar.getInstance();intent = new Intent();bundle = new Bundle();timer = new Timer();timer.schedule(timerTask, 1000, 3000);//没隔2S发送一个广播}TimerTask timerTask = new TimerTask() {@Overridepublic void run() {Message message = new Message();message.what = 1;handler.sendMessage(message);}};Handler handler = new Handler() {// 定义处理信息的方法public void handleMessage(Message msg) {switch (msg.what) {case 1:sendTimeChangedBroadcast();Log.e("多少次", "123456789");break;}super.handleMessage(msg);}};@Overridepublic IBinder onBind(Intent intent) {return null;}/** * 发送广播,通知UI层时间已改变 */private void sendTimeChangedBroadcast() {Calendar c = Calendar.getInstance();hour = c.get(Calendar.HOUR_OF_DAY);minute = c.get(Calendar.MINUTE);bundle.putInt("hour",hour);bundle.putInt("minute", minute);intent.putExtras(bundle);intent.setAction(MainActivity.TIME_CHANGED_ACTION);// 发送广播,通知UI层时间改变了sendBroadcast(intent);}/** * 获取最新系统时间 *  * @return */private int getHour() {// 获取当前系统时间xisohihour = c.get(Calendar.HOUR_OF_DAY);return hour;}private int getMinute() {// 获取当前系统时间fenzhongminute = c.get(Calendar.MINUTE);return minute;}@Overridepublic ComponentName startService(Intent service) {Log.e("TTTTT", "TimeService->startService");return super.startService(service);}@Overridepublic void onDestroy() {if (timer != null) {timer.cancel();timer = null;}super.onDestroy();Log.i("TTTTT", "TimeService->onDestroy");}}
在BroadcastReceiver中:
<pre name="code" class="java"><pre name="code" class="html">public class UITimeReceiver extends BroadcastReceiver{private MainActivity activity = new MainActivity();private int hour;private int minute;@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if(MainActivity.TIME_CHANGED_ACTION.equals(action)){hour=intent.getExtras().getInt("hour");minute = intent.getExtras().getInt("minute");// 获取当前时间是12小时制还是24小时制ContentResolver cv = context.getContentResolver();String strTimeFormat = android.provider.Settings.System.getString(cv,android.provider.Settings.System.TIME_12_24);if (strTimeFormat.equals("24")) {Log.i("activity", "24");if (minute < 10)activity.tv_time.setText("时间:" + hour + ":" + "0" + minute);else {activity.tv_time.setText("时间:" + hour + ":" + minute);}}if (strTimeFormat.equals("12")) {Log.i("activity", "12");String amPmValues;Calendar c = Calendar.getInstance();if (c.get(Calendar.AM_PM) == 0) {amPmValues = "AM";} else {amPmValues = "PM";}if (minute < 10)activity.tv_time.setText("时间:" + hour + ":" + "0" + minute+ amPmValues);else {activity.tv_time.setText("时间:" + hour + ":" + minute + amPmValues);}}}}}
这样简单的时间更新就可以实现了,利用一个定时发送器






<span style="font-family:SimSun;font-size:18px;"></span>
</pre>
0 0