AlarmManager 用法

AlarmManager 可以按照”预先设定的时间“或”时间间隔"激活Intent的一种方式,他与timer不同的是,他是程序之外的,生命周期不受程序控制,即使程序关闭也会触发。它比Service和定时器更加节省资源。如果在应用程序内触发定时操作,推荐Handler,Timer以及Thread等方式。因为这样Android能更好的控制系统资源。

一.代码

public class MainActivity extends Activity {

    Button btn1,btn2;

    AlarmManager am;
    PendingIntent pi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建AlarmManager
        am=(AlarmManager)getSystemService(Context.ALARM_SERVICE);

        btn1=(Button)findViewById(R.id.btn1);
        btn2=(Button)findViewById(R.id.btn2);

        btn1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                //启动照相机
                Intent intent = new Intent("android.media.action.STILL_IMAGE_CAMERA");
                pi= PendingIntent.getActivity(MainActivity.this,0,intent,0);

                //十秒后激活Intent
                Calendar calendar=Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);

                //设置Alarm,第一个参数:Alarm类型,第二个参数触发时间,第三个参数PendingIntent
                am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);

            }
        });

        btn2=(Button)findViewById(R.id.btn2);
        btn2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //取消AlarmManager任务
                am.cancel(pi);
            }
        });
    }
}

二.相关说明

1.Alarm有四个可用的类型(代码中的set方法中第一个参数)

(1)RTC_WAKEUP 在指定的时间唤醒设备,并激活PendingIntent

(2)RTC 在指定的时间激活PendingIntent,但是不会唤醒设备

(3) ELAPSED_REALTIME 根据设备启动之后经过的时间激活PendingIntent,但是不会唤醒设备,经过的时间包含设备休眠的所有时间

(4)ELAPSED_REALTIME_WAKEUP 在设备启动并经过指定的时间之后激活PendingIntent和唤醒设备。

2.设置重复的Alarm。

如果需要Alarm间隔一段时间激活Intent,可以是用setRepeating或setIndexactRepeating两个方法,这两个方法都支持Alarm类型。

(1)setRepeating方法可以对时间进行精确的控制,最多可以精确到毫秒。但是这样设备比较耗电

例:

// 创建AlarmManager
                AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                // 启动照相机
                Intent intent = new Intent(
                        "android.media.action.STILL_IMAGE_CAMERA");
                PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

                //每个十秒触发
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);

                am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10000, pi);
                // 取消AlarmManager任务
                //am.cancel(pi);

(2)setIndexactRepeating 相比setRepeating,setIndexactRepeating 可以减少电量的消耗。在使用setIndexactRepeating 时,Android会同步多个没有精确指定时间间隔的Alarm,然后同时触发她们。(一次触发多个,例如设置Alarm时间间隔为:INTERVAL_HOUR,Android会同步所有时间间隔为为INTERVAL_HOUR的Alarm,并且同时触发)

setIndexactRepeating 常用的时间间隔

INTERVAL_FIFTEEN_MINUTES(每十五分钟)

INTERVAL_HALF_HOUR(每隔半个小时)

INTERVAL_HOUR(每隔一个小时)

INTEVAL_HALF_DAY(每个半天)

INTEVAL_DAY(每隔一天)

例:

// 创建AlarmManager
                am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                // 启动照相机
                Intent intent = new Intent(
                        "android.media.action.STILL_IMAGE_CAMERA");
                pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

                //每个十五分钟触发
                am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                        AlarmManager.INTERVAL_FIFTEEN_MINUTES,
                        AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);

AlarmManager 用法

时间: 2024-11-09 00:52:07

AlarmManager 用法的相关文章

Android实战简易教程-第五十八枪(AlarmManager类用法研究小实例)

一.概念及相关方法 android中实现定时任务一般有两种实现方式,一种是使用Java API中提供的Timer类,一种是使用android的Alarm机制.Timer机制有个短板就是不太适用于那些需要长期在后台运行的任务,我们都知道为了让电池更加耐用,会在长时间不操作手机的情况下,CPU进入休眠状态,这是可能导致Timer中的定时任务无法正确运行.所以我们重点来研究一下Alarm机制. AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,

android学习十八(Service服务的基本用法)

定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: package com.jack.servicetest; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service { @Over

我的Android进阶之旅------>Android使用AlarmManager全局定时器实现定时更换壁纸

该DEMO将会通过AlarmManager来周期的调用ChangeService,从而让系统实现定时更换壁纸的功能. 更换壁纸的API为android.app.WallpaperManager,它提供了clear()方法来清除壁纸,还提供了如下方法来设置壁纸. setResource(int resid)将壁纸设置为resid资源所代表的图片 setBitmap(Bitmap bitmap)将壁纸设置为bitmap所代表的位图 setStream(InputStream data)将壁纸设置为d

Android AlarmManager 的一点了解

最近再调查手机standby 电流偏高时,跟踪到了AlarmManager,就对它进行了相关的了解. AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.通过对它的使用,它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 在android系统中,底层系统提供了两种类型的时钟,软时钟与硬时钟,软时钟就是我们常说的 Timer,硬时钟就是RTC.系统在正常运行的情况下,Timer工作提供时间服务和闹铃提醒,而在系统进入睡眠状

Android提供的系统服务之--AlarmManager(闹钟服务)

Android提供的系统服务之--AlarmManager(闹钟服务) --转载请注明出处:coder-pig 本节引言: 本节主要介绍的是Android系统服务中的---AlarmManager(闹钟服务), 除了开发手机闹钟外,更多的时候是作为一个全局的定时器,通常与Service 结合,在特定时间启动其他的组件!本节就来对这个AlarmManager来进行解析 同时通过小闹钟与自动换壁纸来演示这个AlarmManager的用法,好了,开始本节的 内容吧! 本节正文: 1.概念与相关属性方法

Android getSystemService用法实例总结

本文实例分析了Android getSystemService用法.分享给大家供大家参考,具体如下: 1. 说明 android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据,以下将说明他们

Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作

AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service. 下面的代码详细的介绍了两种定时方式的使用: (1)在指定时长后执行某项操作 //操作:发送一个广播,广播接收后Toast提示定

AlarmManager、PendingIntent的使用附件Home监听十分钟后再度启动应用取消服务

AlarmManager.PendingIntent的使用\附件Home监听十分钟后再次启动应用取消服务 AlarmManager.PaddingIntent的使用\ \附件Home监听十分钟后再次启动应用取消服务 对应AlarmManage有一个AlarmManagerServie服务程 序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系统中,linux实现的设备名 为”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃

Android中的定时器AlarmManager

在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService AlarmManager的作用文档中的解释是:在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,常用方法有五个: (1)set(int type,long startTime,PendingIntent pi): 该方法用于设置一次性闹钟,第一个参数表示闹钟类型,第二个参数表