Android Api Demos登顶之路(三十一)Alarm Controller
来源:互联网 发布:centos 6.9 编辑:程序博客网 时间:2024/05/22 12:22
这个demo演示了闹钟定时器的用法。功能与TimerTask功能类似,但Alarm 即使在当前应用退出后也可以做到Schedule一个任务在指定的时刻执行。
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/info" /> <Button android:id="@+id/bt_one_shot" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_gravity="center_horizontal" android:text="One shot alarm"/> <Button android:id="@+id/bt_repeating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_gravity="center_horizontal" android:text="Start repeating alarm"/> <Button android:id="@+id/bt_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_gravity="center_horizontal" android:text="Stop repeating alarm"/></LinearLayout>
OneShotReceiver.java
public class OneShotReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String text="接收到了一个定时器发送的广播"; Toast.makeText(context,text, 1).show(); }}
RepeatingAlarmReceiver.java
public class RepeatingAlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String text="接收到了定时器重复发送的广播"; Toast.makeText(context,text, 1).show(); }}
ManiActivity
public class MainActivity extends Activity implements OnClickListener { private Toast toast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button bt_one_shot = (Button) findViewById(R.id.bt_one_shot); Button bt_repeating = (Button) findViewById(R.id.bt_repeating); Button bt_stop = (Button) findViewById(R.id.bt_stop); bt_one_shot.setOnClickListener(this); bt_repeating.setOnClickListener(this); bt_stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_one_shot: oneShotAlarm(); break; case R.id.bt_repeating: repeatingAlarm(); break; case R.id.bt_stop: stopAlarm(); break; default: break; } } private void stopAlarm() { Intent intent = new Intent(this, RepeatingAlarmReceiver.class); // 创建一个延迟意图,用于定时发送广播 PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); // 获取闹钟定时器 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); // 取消发送任务 am.cancel(sender); if (toast != null) { toast.cancel(); } else { toast=Toast.makeText(this, "已取消发送广播", 1); toast.show(); } } private void repeatingAlarm() { Intent intent = new Intent(this, RepeatingAlarmReceiver.class); // 创建一个延迟意图,用于定时发送广播 PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); // 获取一个相对时间:从开机到当前的毫秒数 long firstTime=SystemClock.elapsedRealtime(); firstTime+=5*1000; // 获取闹钟定时器 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); // 设置一重复性定时器. //闹钟类型表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用相对时间 am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender); if (toast != null) { toast.cancel(); } else { toast=Toast.makeText(this, "开始计时,5秒后将重复发送广播...", 1); toast.show(); } } private void oneShotAlarm() { Intent intent = new Intent(this, OneShotReceiver.class); // 创建一个延迟意图,用于定时发送广播 PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0); // 创建一个定时器,时间间隔为5秒 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); // 添加一个时间间隔 calendar.add(Calendar.SECOND, 5); // 获取闹钟定时器 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); // 设置一次性定时器,第一个参数表示闹钟类型,第二个参数表示触发闹钟需等待的时间,第三个参数 // 表示闹钟响应的动作 // RTC_WAKEUP表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间 am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); if (toast != null) { toast.cancel(); } else { toast=Toast.makeText(this, "开始计时,5秒后将发送广播...", 1); toast.show(); } }}
配置文件
<!-- android:process=":remote"表示当需要接收广播时自动创建进程 --> <receiver android:name="com.fishtosky.alarmcontroller.OneShotReceiver" android:process=":remote"></receiver> <receiver android:name="com.fishtosky.alarmcontroller.RepeatingAlarmReceiver" android:process=":remote"></receiver>
0 0
- Android Api Demos登顶之路(三十一)Alarm Controller
- Android Api Demos登顶之路(三十二)Alarm Service
- Android Api Demos登顶之路(五十)Notification-->Service Controller
- Android Api Demos登顶之路(五十三)Service Foreground Service Controller
- Android Api Demos登顶之路(五十四)Service IsolateService Controller
- Android Api Demos登顶之路(二)
- Android Api Demos登顶之路(三)
- Android Api Demos登顶之路(四)
- Android Api Demos登顶之路(五)
- Android Api Demos登顶之路(六)
- Android Api Demos登顶之路(七)
- Android Api Demos登顶之路(八)
- Android Api Demos登顶之路(九)
- Android Api Demos登顶之路(十)Overscan
- Android Api Demos登顶之路(十一)Persistent state
- Android Api Demos登顶之路(十二)Presentation
- Android Api Demos登顶之路(十四)Quick Contacts
- Android Api Demos登顶之路(十五)Receive Result
- action sheet
- HDU 3308 LCIS
- 欢迎参加 2015 Autodesk 产品开发培训课程 (2015/8/17开始)
- MFC radio button 设置默认选中
- Chapter 10 手势 iOS 8 -Swift Programming cookBook 读书笔记
- Android Api Demos登顶之路(三十一)Alarm Controller
- jQuery_统计图插件-flot
- 黑马程序员------------------java基础--------------------集合
- C++ 简介
- VBA学习笔记
- 一颗普通的二叉树,如何寻找两个节点的最低公共祖先(发现的一个与算法无关的引用问题)
- 从员工到总监,你要明白的8个道理
- 机器人跳跃问题
- hdu 3746 Cyclic Nacklace KMP循环节问题