android AlarmManager的使用

Android的闹钟实现机制很简单, 只需要调用AlarmManager.Set()方法将闹钟设置提交给系统,当闹钟时间到后,系统会按照我们的设定发送指定的广播消息,我们写一个广播去接收消息做相应处理即可。

第一步是设置闹钟:

<span style="color: rgb(51, 51, 51); font-family: 'Microsoft YaHei', Tahoma, Helvetica, SimSun, sans-serif; font-size: 14px; line-height: 21px; ">private static String MY_ALARM_ACTION = "android.alarm.test.action";</span>	
<span style="white-space:pre">	</span>/**
	 * 设置闹钟
	 * @param context
	 * @param firstTriggerTimeMillis 首次触发时间 (单位毫秒)
	 * @param periodTimeMillis 间隔时间
	 */
	private void setAlarmTime(Context context, long firstTriggerTimeMillis, long periodTimeMillis) {
		AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
		Intent intent = new Intent(MY_ALARM_ACTION);
		PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
		alarm.setRepeating(AlarmManager.RTC_WAKEUP, firstTriggerTimeMillis, periodTimeMillis, sender);
	}

第二步是写一个接口器接收事件广播:

	/**
	 * 闹钟接收
	 * @author Antony
	 * @date 2014-7-23
	 */
	public static class MyAlarmReceiver extends BroadcastReceiver {
	    public void onReceive(Context context, Intent intent) {
	        if (MY_ALARM_ACTION.equals(intent.getAction())) {
	        	Logcat.e("接收一次闹钟消息!");
<span style="white-space:pre">			</span>//TODO 在这里写相关处理
	        	return;
	        }
	    }
	}

当然Receiver是需要在Mainfest.xml中注册的,我的注册信息如下:

        <receiver android:name="com.test.fee.MyTest$MyAlarmReceiver" >
            <intent-filter>
                <action android:name="android.alarm.zywl.action" />
            </intent-filter>
        </receiver>

细心的可能会发现我的MyAlarmReceiver类是带static关键词的,还有我在注册广播时是加了"$"符号的。原因是酱紫的,为了代码不至于看起来那么凌乱,接收器是作为MyTest的内部类来写的。如果BroadcastReceiver做为内部类来写在Manifest中是不能直接用形如下面的方式来注册的:

        <receiver android:name="com.test.fee.MyAlarmReceiver" >
            <intent-filter>
                <action android:name="android.alarm.zywl.action" />
            </intent-filter>
        </receiver>

这样会抛出找不到MyAlarmReceiver类的错误信息的。也就是说BroadcastReceiver想做为内部类来写要加Static关键字,并且在注册路径要加$符号标识清楚内部类归属。

第三步就是再写一个开机广播接收器:

写法与MyAlarmReceiver类似,可做为内部类也可单独列为一个类来写。在开机广播接收器中调用设置闹钟的方法即可。

这样每次手机重启后又会重新设置闹钟,闹钟就不会出现中断了。当然我这里设置的是以固定时间间隔重复运行的闹钟,因需求而定了。

闹钟实现 原理就这些了,至于具体的界面显示及提示方式等,每个人想法都有不同,就不再说了。

时间: 2024-10-07 10:24:21

android AlarmManager的使用的相关文章

Android AlarmManager的取消

取消alarm使用AlarmManager.cancel()函数,传入参数是个PendingIntent实例. 该函数会将所有跟这个PendingIntent相同的Alarm全部取消,怎么判断两者是否相同,android使用的是intent.filterEquals(),具体就是判断两个PendingIntent的action.data.type.class和category是否完全相同. 具体代码如下: 设置闹钟: // 指定启动AlarmActivity组件 Intent intent =

Android AlarmManager 的一点了解

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

Android alarmmanager的使用方法介绍

1.AlarmManager,顾名思义,就是"提醒",是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作.在使用Intent的时候,我们还需要在执行startActivity.startSe

Android AlarmManager实现不间断轮询服务

在消息的获取上是选择 轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如 更新检查,可能是半个小时或一个小时一次,那用轮询也是一个不错的选择,因为不需要额外搭建推送服务器,不用额外配置推送服务.另外推送现在一般以维持长 连接的方式实现,在手机客户端也会耗费一定的电量.今天就介绍一个在Android上实现轮询机制的方法——使用AlarmManager AlarmManager 在Android中主要用来定

Android AlarmManager闹钟实现

什么是AlarmManager? AlarmManager是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作.在使用Intent的时候,我们还需要在执行startActivity.startServi

Unity Android Local Notification

记录一下,通过插件的形式实现Unity游戏Android版本的本地通知. 主要参考这个.稍作修改.相关文件与代码共享在Github. 实现步骤 1. 在Windows系统里面,双击cdz_build.bat. 会在当前目录生成一个AlarmReceiver.jar. 2. 拷贝AlarmReceiver.jar到Unity工程的Assets\Plugins\Android\libs\目录下. 3. 生成一个本地通知: AndroidJavaObject nativeObj = new Andro

Android随笔之——闹钟制作铺垫之AlarmManager详解

说实话,之前写的两篇博客Android广播机制Broadcast详解.Android时间.日期相关类和方法以及现在要写的,都算是为之后要写的闹钟应用做铺垫,有兴趣的话,大家可以去看看前两篇博客. 一.AlarmManager简介 对于一个闹钟应用的实现,个人觉得最主要的应该要属于AlarmManager了.AlarmManager称为全局定时器,字面意思就是闹钟管理(请原谅我蹩脚的英语),是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我

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

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

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

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