AlarmManager闹钟管理对象实现手机定时操作
- 如果要对手机进行定时的操作,可以使用handler,timertask 、Alarm机制。这里对 Alarm机制做一个讲解。
- 先看一段代码吧,这是通过AlarmManager机制实现定时操作10分钟后操作手机
Intent intent=new Intent(MainActivity.this,AlarmBroadcast.class);
//创建一个AlarmManager对象
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
//新建个PendingIntent对象,里面传入的参数分别是,activity, requestcode,intent,flag;
PendingIntent pending = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
//设置个时间
long triggerTime = SystemClock.elapsedRealtime() + 10*60 * 1000;
//10分钟后触发intent。
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime,pending);
刚开始时,以为这个broadcast一定要是静态的,其实不是的。intent可以携带action传出去,也可以直接指定要跳转的activity,这里就是直接指定的AlarmBroadcast.class这个类,没有携带action。
关于PendingIntent的相关用法可以参考链接里的文章:PendingIntent解释
3.关于AlarmManager的这几个参数:
AlarmManager.ELAPSED_REALTIME:表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
AlarmManager.ELAPSED_REALTIME_WAKEUP:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;
AlarmManager.RTC:表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
AlarmManager.RTC_WAKEUP:表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;
AlarmManager.POWER_OFF_WAKEUP:表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;
4.另一种通过AlarmManager周期性的连续对手机进行操作
AlarmManager mAlarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(RECODE_ACTION);
intent.putExtra("filepath", filepath);
PendingIntent mPending = PendingIntent.getBroadcast(
getApplicationContext(), 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
long triggerTime = SystemClock.elapsedRealtime();
long intervalTime = 2 * 60 * 60 * 1000;
mAlarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime,
intervalTime, mPending);
此段代码是先发送一次广播,然后在每隔2小时发送一次广播。调用的是setRepeating()函数,传入了一个周期的时间。
可以利用这两种方法对手机进行定时操作和周期性的重复操作。