必威体育Betway必威体育官网
当前位置:首页 > IT技术

AlarmManager 闹钟简述

时间:2019-10-31 12:15:29来源:IT技术作者:seo实验室小编阅读:55次「手机版」
 

alarmmanager

一 AlarmManager概述

AlarmManager是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的intent。简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作。在使用Intent的时候,我们还需要在执行startActivity、startService或sendBroadcast才能使Intent有用。而PendingIntent的话就是将这个动作包含在内了。

定义一个PendingIntent对象 : PendingIntent pi = PendingIntent.getBroadcast(this,0,intent,0);

二 AlarmManager方法

AlarmManager有如下三种方式提供提示服务:

方法1 : set(int type,long triggerAtTime,PendingIntent operation)

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

方法2 : setRepeating(int type,long triggerAtTime,long Interval PendingIntent operation)

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

方法3 : setInexactRepeating(int type,long triggerAtTime,long interval PendingIntent operation)

该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已

参数:

long startTime: 闹钟的第一次执行时间,以毫秒为单位,可以自定义时间,不过一般使用当前时间。需要注意的是,本属性与第一个属性(type)密切相关
	 
long intervalTime:对于后两个方法来说,存在本属性,表示两次闹钟执行的间隔时间,也是以毫秒为单位。

PendingIntent pi: 绑定了闹钟的执行动作,比如发送一个广播、给出提示等等

三 AlarmManager使用

1 获得ALarmManager实例 ALarmManager am=(ALarmManager)getSystemService(ALARM_SERVICE);

2 定义一个PendingIntent发出广播

3 调用ALarmManager方法,设置定时或重复提醒

4 取消提醒:

实现6后秒提醒一次的功能:

 AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);//获取AlarmManager实例 
 int anHour =  6 * 1000 ;  // 6秒 
 long triggerAtTime = SystemClock.elapsedRealtime() + anHour;  
 Intent intent2 = new Intent(this, AlarmReceiver.class); 
 PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent2, 0);  
 manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);//开启提醒 

用于取消:

 aManager= (AlarmManager)getSystemService(ALARM_SERVICE);
 Intent intent = new Intent(AlarmTest.this, AlarmActivity.class); 
 intent.setAction("111111");
 PendingIntent pendingIntent = PendingIntent.getActivity( AlarmTest.this, 0, intent, 0); // 创建PendingIntent对象 
 aManager.cancel(pendingIntent);

Android定时关机示例

 public class xxxx extends BroadcastReceiver {
   
		private static String LAST_ALARM_TIME="08:00";
   
		//获得ALarmManager实例
		AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
		
		String shutdown = null;//关机时间字符串
		int[] AlarmOff = {2018,12,14,11,00}; //关机时间数据

		int mYear =  AlarmOff[0];
		int mMonth = AlarmOff[1];
		int mDay = AlarmOff[2];
		int mHour = AlarmOff[3];
		int mMinute = AlarmOff[4];
		
		//将关机时间转换为字符串
		stringbuilder date = new StringBuilder().APPend(mYear).append("/")
                .append((mMonth < 10) ? "0" + mMonth : mMonth) .append("/")
                .append((mDay < 10) ? "0" + mDay : mDay).append(" ")
                .append((mHour < 10) ? "0" + mHour : mHour).append(":")
                .append((mMinute < 10) ? "0" + mMinute : mMinute);
		
		shutdown = date.toString();
		
		
		//格式化关机时间 将关机时间字符串 转换为 yyyy/MM/dd HH:mm 格式的 英文日期时间格式
		Date date = null;
        simpledateformat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm");
		
		try {
            date = sdf.parse(shutdown);
        } catch (ParseException e) {
            e.printstacktrace();
        }
		long timeSetup = date.getTime();//获取关机时间距离1970年1月1日(好像是这个时间)的毫秒数
		
        Intent intent = new Intent(context,xxxx.class);//xxxx.class 即定时时间到需要跳转到的目标服务
        intent.setAction(shutdown);//设置想要启动能够响应设置的这个 action(关机时间) 的活动 ,其实就是到时间后 和这个关机时间作比较
		
		//将关机时间存储到   AlarmShutdown.xml文件中
		SharedPreferences pre = context.getSharedPreferences("AlarmShutdown", context.MODE_PRIVATE);
		SharedPreferences.Editor presEditor = pre.edit();
		presEditor.putString(LAST_ALARM_TIME,shutdown);
		presEditor.commit();
		
		//定义一个PendingIntent对象
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
		
		//设置闹钟 闹钟类型是RTC_WAKEUP,闹钟时间timeData ,闹钟响应动作是 pi
        aManager.set(AlarmManager.RTC_WAKEUP, timeSetup, pi);

		//闹钟时间来临,对比 闹钟时间的动作“关机time” 是否等于写入xml文件中的关机时间。比较的是字符串
	   if(action.equals(getLastAlarmTime(context))){
	   
			//关机
            Intent shutdownIntent = new Intent(Intent.ACTION_request_SHUTDOWN);
            shutdownIntent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
            shutdownIntent.setFlags(Intent.flag_activity_new_task);
            mcontext.startActivity(shutdownIntent);
	   }
   
		public static String getLastAlarmTime(Context context){
			SharedPreferences pre = context.getSharedPreferences("AlarmShutdown", context.MODE_PRIVATE);
			String ret = pre.getString(LAST_ALARM_TIME,"08:00");
			Log.e(TAG,"last time string is:" + ret);
				if(ret != null){
					return ret;
				}else{
					return null;
				}
			}
		
   }

文章最后发布于: 2018-12-26 14:48:02

相关阅读

有智能音箱的风口,智能闹钟音箱能否成为爆款吗?

智能闹钟音箱在智能音箱的风口下,能否成为爆款吗?智能音箱的爆红带火了相关的单品,比如:智能闹钟;而市面上又出现了越来越多的集合闹钟

如何取消qq提醒(QQ闹钟)的方法分享(全程图解)

所谓请神容易送神难,添加QQ提醒或许很简单,但是怎样取消到是难为了不少人,那么小编就来教教大家怎样取消QQ提醒吧 首先我们要进入到Q

点心闹钟怎么用?点心闹钟新手使用教程

点心闹钟是一款智能的手机闹钟应用,用户可以自定义设置工作日闹钟,非常的方便,那么这样的一款软件,对于新手该如何使用呢?下面小编就给

分享到:

栏目导航

推荐阅读

热门阅读