AlarmManager 闹钟服务
一.闹钟服务流程
1.0.AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 获得系统提供的AlarmManager服务的对象
1.1.Intent设置要启动的组件: Intent intent = new Intent(MainActivity.this, SecondActivity.class);
1.3.PendingIntent对象设置动作,启动的是Activity还是Service,又或者是广播!
1 2 3 4 5 | PendingIntent pi = PendingIntent.getActivity(MainActivity. this , 0 , intent, 0 ); 注意: a.获取的是getActivity、getService、getBroadcast b.假如你用的是alarmManager发送广播,广播再激活Activity的话, 则需要为Intent设置一个flag: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
1.4.调用AlarmManager的set( )方法设置单次闹钟的闹钟类型,启动时间以及PendingIntent对象
1 2 3 4 5 6 | alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pi); 注意: a.set( int type, long startTime,PendingIntent pi):一次性闹钟 b.setExact( int type, long triggerAtMillis, PendingIntent operation): 在规定的时间精确的执行闹钟,比set方法设置的精度更高 c.setRepeating( int type, long startTime, long intervalTime,PendingIntent pi): 重复性闹钟,和 3 有区别, 3 闹钟间隔时间不固定 d.cancel(PendingIntent pi): 取消AlarmManager的定时服务 |
二.举个栗子……
2.0. 实例每天23:59:00 闹钟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { AlarmManager alarmManager; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23 ); calendar.set(Calendar.MINUTE, 59 ); calendar.set(Calendar.SECOND, 0 ); calendar.set(Calendar.MILLISECOND, 0 ); Intent intent = new Intent(); intent.setClassName( "com.gatsby.networktime" , "com.gatsby.networktime.SecondActivity" ); intent.putExtra( "msg" , "helloWorld" ); // 当前系统 时间戳 long systemTime = System.currentTimeMillis(); Log.d( "gatsby" , "systemTime->" + System.currentTimeMillis()); // 闹钟 时间戳 long alarmTime = calendar.getTimeInMillis(); Log.d( "gatsby" , "alarmTime->" + calendar.getTimeInMillis()); if (systemTime > alarmTime) { // 如果设置的时间小于当前时间,闹钟时间 将添加一天,即明天 calendar.add(Calendar.DAY_OF_YEAR, 1 ); alarmTime = calendar.getTimeInMillis(); Log.d( "gatsby" , "alarmTime2->" + calendar.getTimeInMillis()); } PendingIntent pi = PendingIntent.getActivity(MainActivity. this , 0 , intent, 0 ); // 重复每天提醒 alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, AlarmManager.INTERVAL_DAY, pi); Log.d( "gatsby" , "alarmTime.setRepeating->" + calendar.getTimeInMillis()); } } |
2.1.取消闹钟
1 | alarmManager.cancel(pi); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】