Android实现指定时间定时触发方法
程序员文章站
2023-11-30 11:39:28
本文实例为大家分享了android九宫格图片展示的具体代码,供大家参考,具体内容如下
目标效果:
运行打开开关,下边的时间选择会显示,当...
本文实例为大家分享了android九宫格图片展示的具体代码,供大家参考,具体内容如下
目标效果:
运行打开开关,下边的时间选择会显示,当前时间09:56,选择09:57后,会发现马上弹出选择的时间日志数据,过一会到了09:57后,会发现每一秒都调用打印日志信息的方法,点击关闭开关,停止打印。
1.activity_main.xml页面设置布局,并隐藏下方的时间选择。
activity_main.xml页面:
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".mainactivity" > <switch android:id="@+id/swonofoff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_centerhorizontal="true" android:layout_margintop="30dp" android:texton="开启" android:textoff="关闭" android:text="定时" /> <linearlayout android:id="@+id/llselecttime" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="50dp" android:padding="40dp" android:visibility="gone" android:orientation="horizontal" > <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:gravity="right" android:text="时间 " /> <textview android:id="@+id/tvselecttime" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="3" android:gravity="left" android:text="00:00" /> </linearlayout> </relativelayout>
2.新建task.java页面,继承timertask,作为每次调用触发的方法。
package com.example.time; import java.util.timertask; import android.util.log; public class task extends timertask{ @override public void run() { log.i("wxy", "提示"); } }
3.mainactivity.java页面获取选择时间并进行调用。
mainactivity.java页面:
package com.example.time; import java.util.calendar; import java.util.date; import java.util.timer; import java.util.timertask; import android.os.bundle; import android.app.activity; import android.app.timepickerdialog; import android.app.timepickerdialog.ontimesetlistener; import android.util.log; import android.view.view; import android.view.view.onclicklistener; import android.widget.compoundbutton; import android.widget.linearlayout; import android.widget.switch; import android.widget.textview; import android.widget.timepicker; import android.widget.compoundbutton.oncheckedchangelistener; public class mainactivity extends activity implements onclicklistener { private linearlayout llselecttime; // 显示选择时间的一层 private switch swonofoff; // 开关 private textview tvselecttime; private timer timer; // 定时器 @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); llselecttime = (linearlayout) findviewbyid(r.id.llselecttime); tvselecttime = (textview) findviewbyid(r.id.tvselecttime); tvselecttime.setonclicklistener(this); // 开关点击事件 swonofoff = (switch) findviewbyid(r.id.swonofoff); swonofoff.setoncheckedchangelistener(new oncheckedchangelistener() { @override public void oncheckedchanged(compoundbutton compoundbutton, boolean checked) { if (checked) { llselecttime.setvisibility(view.visible); // 设置可见 } else { llselecttime.setvisibility(view.gone); // 设置不可见,留了位置 timer.cancel();// 关闭定时器 } } }); } @override public void onclick(view view) { switch (view.getid()) { case r.id.tvselecttime: // 显示选择时间对话框 showselectdailog(); break; default: break; } } // 定时触发事件 private void timetrigger(int hour, int minute) { calendar calendar = calendar.getinstance(); calendar.set(calendar.hour_of_day, hour); calendar.set(calendar.minute, minute); calendar.set(calendar.second, 0); date date = calendar.gettime(); // 第一次执行任务的时间 if (date.before(new date())) { // 如果第一次执行任务的时间小于当前时间,那么要在执行任务的时间加一天,否则会立即执行 date = this.addday(date, 1); } log.i("wxy", "date:" + date); timer = new timer(true); timer.schedule(new task(), date, 1000);//第一个参数为定时调用的方法,注意是一次性的,如果关闭timer得重新实例化, 第二个参数为第一次调用的时间,第三个参数为两次调用方法的间隔毫秒数 } // 日期加一天 public date addday(date date, int num) { calendar calendar = calendar.getinstance(); calendar.settime(date); calendar.add(calendar.day_of_month, num); return calendar.gettime(); } // 显示选择时间对话框 private void showselectdailog() { ontimesetlistener listener = new ontimesetlistener() { // 选择后返回的数据 @override public void ontimeset(timepicker arg0, int hour, int minute) { string time = "";// 时间字符串 if (hour < 10) { // 如果小时小于10,在前边添加0 string h = "0" + hour; time += h; } else time += hour; time += ":"; if (minute < 10) { string m = "0" + minute; time += m; } else { time += minute; } tvselecttime.settext(time); // 定时触发事件 timetrigger(hour, minute); // 触发并传递获取到的选择的小时和分钟,最为每天定时调用的时间 } }; timepickerdialog dialog = new timepickerdialog(this, listener, 0, 0, true); // 第三个参数为默认时间,最后一个参数为是否24小时形式 dialog.show(); } }
4.运行就能显示目标效果了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。