Android AlarmManager

2.设置闹钟
//设置闹钟
Intent intent = new Intent(AlarmManagerActivity.this, AlarmActivity.class);
//获取显示闹钟的PendingIntent
//PendingIntent是对Intent的描述,主要用来处理即将发生的事情,这个Intent会由其他程序进行调用,这里是由闹钟调用
PendingIntent pendingIntent = PendingIntent.getActivity(AlarmManagerActivity.this, 0, intent, 0);
//获取AlarmManager对象
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//获取日历对象
Calendar c = Calendar.getInstance();
//设置闹钟的小时数
c.set(Calendar.HOUR_OF_DAY, timePicker.getHour());
//设置闹钟的分钟数
c.set(Calendar.MINUTE, timePicker.getMinute());
//设置闹钟的秒数
c.set(Calendar.SECOND, 0);
//第一个参数:闹钟类型
//ELAPSED_REALTIME:在指定的延时后提醒(不唤醒系统)
//ELAPSED_REALTIME_WAKEUP:在指定的延时后提醒(唤醒系统)
//RTC:到达指定时间提醒(不唤醒系统)
//RTC_WAKEUP:到达指定时间提醒(唤醒系统)
//第二参数:指定时间,获取日历对象对应时间的毫秒数
//第三个参数:用于指定当闹钟唤醒时,所指定的页面
alarm.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
java
给app设置定时提醒的功能,典型的例子有闹钟,AlarmManager是Android系统级的服务,原理相当的简单,当你设定一个时间,然后在到达时候后,系统触发一个广播,然后广播通过PendingIntent来达到最终目的。

AlarmManager有三个常用的方法:
(1):设置一次性闹钟:
AlarmManager.set(int type,long startTime,PendingIntent pendingIntent );
(2):该方法用于设置重复闹钟:
setRepeating(int type,long startTime,long intervalTime,PendingIntent pendingIntent );
(3):该方法也用于设置重复闹钟:
setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pendingIntent );

参数:int type: 闹钟的类型,常用的有5个值
分别是:
a: AlarmManager.ELAPSED_REALTIME 表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;

b:AlarmManager.ELAPSED_REALTIME_WAKEUP 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;

c:AlarmManager.RTC 表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;

d:AlarmManager.RTC_WAKEUP 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;

e:AlarmManager.POWER_OFF_WAKEUP 表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4。

参数:long startTime 闹钟开始时间,以毫秒为单位;

参数:PendingIntent pendingIntent:设定闹钟的动作,可以是Activity,BroadcastReceiver 等。

参数:long intervalTime:在第二个方法中指,两次闹钟的间隔时间,相等间隔;在第三个方法中也指两次闹钟间隔时间,不相等时间;

现在就可以设置闹钟了:
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
1.定义一个广播RemindReceiver.java用来接收系统提醒

2.AndroidManifest.xml中注册这个广播

3.添加一个提醒: alarmManager.set

在AlarmManager类里面有几个常量,定义了闹钟的唤醒方式

AlarmManager.ELAPSED_REALTIME: 采用的时间值一个相对值,以机器的开机时间为0时间点,假如到了设定的时间点但是机器是息屏状态时,闹钟服务无法执行。

AlarmManager.ELAPSED_REALTIME_WAKEUP:采用的时间值和ELAPSED_REALTIME相同,但是可以在息屏状态下唤醒机器。

AlarmManager.RTC:采用的时UTC时间,即与机器的开机时间无关。无法在息屏状态下运行服务。

AlarmManager.RTC_WAKEUP:在RTC的前提下增加了息屏唤醒的功能。

时间转化及其格式转化

 Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(reminderTime);
        int month = calendar.get(Calendar.MONDAY);
        calendar.add(Calendar.MONDAY,1);
        int month1 = calendar.get(Calendar.MONDAY);
        android.util.Log.e("fangjian","month="+month+" month1="+month1);


 /*
 2          * 1、先给定一个时间,例如2017年1月1日
 3          */
 4         Calendar cld = Calendar.getInstance();
 5         cld.set(Calendar.YEAR, 2017);
 6         cld.set(Calendar.MONDAY,0);
 7         cld.set(Calendar.DATE,1);
 8         
 9         //调用Calendar类中的add(),增加时间量
10         cld.add(Calendar.DATE, 100);


//当前时间
new Date()
System.currentTimeMillis();    


SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
String a0 = dateformat0.format(new Date());
System.out.println("时间1:" + a0);
今天  :2013-02-06 11:01:10 星期三
    
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
Date d2 = new Date(c.getTimeInMillis());
星期一:2013-02-04 11:01:10 星期一
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值