首页 > 其他 > 详细

AlarmManager定时器的使用

时间:2015-03-25 12:21:59      阅读:307      评论:0      收藏:0      [点我收藏+]

今天由于公司需要一周一次的更新机制,所以就来了解了一下AlarmManager定时器,简单说就是我们设置一个时间,或者一段时间间隔给他,

 在特定的时间后,会发送一个广播给我们,我们再去做需求.

 举个例子来说明一下,每隔4秒弹个窗提醒;

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);

        intent.setAction("repeat_dialog");

       PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

       AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

        final long firstime = System.currentTimeMillis();

        am.setRepeating(AlarmManager.RTC_WAKEUP, firstime, 4 * 1000,sender);


    public static class AlarmReceiver extends BroadcastReceiver {

        @Override

        public void onReceive(Context context, Intent intent) {

            if (intent.getAction().equals("repeat_dialog")) {

                Toast.makeText(context, "4秒一次哈", Toast.LENGTH_SHORT).show();

            }

        }

    }

当然,不要忘记在AndroidManifest.xml配置:

<receiver android:name="com.meitu.mobile.calendar.event.HolidayAlarmReceiver"></receiver>

        

(eg:onReceive里面不能做耗时超过10秒的动作,若需要做耗时操作,最好的方法就是启个service来执行,如

Intent mServiceIntent = new Intent(context,HolidayIntentService.class);

        context.startService(mServiceIntent);


(public class HolidayIntentService extends IntentService)  我大多是用IntentService,这时在

 onHandleIntent()方法里去执行耗时操作;


当然,需要在AndroidManifest.xml配置:

<service android:name="com.meitu.mobile.calendar.event.HolidayIntentService"></service>

)



AlarmManager的常用方法有三个:
(1)set(int type,long startTime,PendingIntent pi)
        该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。
(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi)

        该方法用于设置重复闹钟,第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。

(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
        该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。



  1. setRepeating的第一个参数是int type,有五种类型可选:

(1)int type:闹钟的类型,常用的有5个值:  

AlarmManager.ELAPSED_REALTIME :表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系                                                                 统启动开始),状态值为3;

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

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

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

AlarmManager.POWER_OFF_WAKEUP : 示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一(虽然这么说,但我自己没用过~~~)

(2)第二个参数:long triggerAtMillis:

   闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关,

        如果第一个参数对应的闹钟使用的是相对时间(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本属性就得使用相对时间(相对于系统启动时间来说),比如当前时间就表示为:SystemClock.elapsedRealtime();

        如果第一个参数对应的闹钟使用的是绝对时间(RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本属性就得使用绝对时间,比如当前时间就表示为:System.currentTimeMillis()

(3)long intervalTime:表示两次闹钟执行的间隔时间,也是以毫秒为单位。

(4)PendingIntent pi:

        是闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。








本文出自 “9628309” 博客,请务必保留此出处http://9638309.blog.51cto.com/9628309/1624105

AlarmManager定时器的使用

原文:http://9638309.blog.51cto.com/9628309/1624105

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!