zoukankan      html  css  js  c++  java
  • android AlarmManager采用


    Android的闹钟实现机制非常easy, 仅仅须要调用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想做为内部类来写要加Statickeyword,而且在注冊路径要加$符号标识清楚内部类归属。



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

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

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

    闹钟实现 原理就这些了。至该界面显示了详细和及时的方式,等等。,每个人都有不同的想法,不要再说了。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    Linux之Shell基本命令
    Linux之find命令
    C++11 auto类型说明符
    C++之类型转换
    C++中指针和引用的区别
    C++之引用
    [BUUCTF]PWN——[ZJCTF 2019]EasyHeap
    [BUUCTF]REVERSE——[WUSTCTF2020]level3
    [BUUCTF]REVERSE——[MRCTF2020]hello_world_go
    [BUUCTF]REVERSE——[GKCTF2020]BabyDriver
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4832927.html
Copyright © 2011-2022 走看看