【最后的总结】我们的Sprint3冲刺——闹钟的添加和管理(刘铸辉,何晓楠)

我们的Sprint3冲刺——闹钟的添加和管理(刘铸辉,何晓楠)

 

闹钟是我们生活中常用的工具。由于我们的软件是学生日程管理系统,所以必须有提醒功能,在android系统中提供了强大的闹钟接口,并且使用起来也非常简单。AlarmManager是android提供的闹铃管理接口。我们想创建一个闹铃程序就需要通过它来完成。那么接下来就看一下创建闹钟的过程:

1. 获取AlarmManager对象



 1 public class AlarmHelper {
2
3 private Context c;
4 private AlarmManager mAlarmManager;
5
6 public AlarmHelper(Context c) {
7 this.c = c;
8 mAlarmManager = (AlarmManager) c
9 .getSystemService(Context.ALARM_SERVICE);
10 }
11
12 public void openAlarm(int id,String content,long time) {
13 Intent intent = new Intent();
14 intent.putExtra("content", content);
15 intent.putExtra("time", time);
16 intent.setClass(c,CallAlarm.class);
17 PendingIntent pi = PendingIntent.getBroadcast(c, id, intent,
18 PendingIntent.FLAG_UPDATE_CURRENT);
19 mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, pi);
20 }
21
22 public void closeAlarm(int id, String title, String content) {
23 Intent intent = new Intent();
24 intent.putExtra("_id", id);
25 intent.putExtra("title", title);
26 intent.putExtra("content", content);
27 intent.setClass(c, CallAlarm.class);
28 PendingIntent pi = PendingIntent.getBroadcast(c, id, intent, 0);
29 mAlarmManager.cancel(pi);
30 }
31 }

2.为AlarmManager建立一个receiver类,这个类是用来接收广播的闹铃事件的,我们也可以看作是闹铃的处理程序吧。



1 public class BootReceiver extends BroadcastReceiver {
2 public void onReceive(Context context, Intent intent) {
3 String action = intent.getAction();
4 if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
5 ScheduleViewAddActivity.setAlart(context);
6 }
7 }
8 }

这个类需要继承自BroadcastReceiver类,这里有两种方式来接收Intent的广播事件,一是动态注册一个Receiver;二是创建一个继承自BroadcastReceiver的类

3.
创建两个Intent,一个是用于AlarmReceiver类处理的,一个是用于广播的



 1 public class CallAlarm extends BroadcastReceiver {
2 @Override
3 public void onReceive(Context context, Intent intent) {
4 String content=intent.getExtras().getString("content");
5 intent.putExtra("content", content);
6 intent.putExtra("time", intent.getExtras().getLong("time"));
7 intent.setClass(context,AlarmAlert.class);
8 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
9 context.startActivity(intent);
10 }

4. 要设置它震动和要响应的铃声



 1 public class AlarmAlert extends Activity {
2 private Dialog builder;
3 private MediaPlayer mp;
4 private Vibrator vibrator;
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 requestWindowFeature(Window.FEATURE_NO_TITLE);
9 setContentView(R.layout.tixing);
10 mp = new MediaPlayer();
11 //控制响铃震动时长
12 new Thread(){
13 public void run(){
14 try {
15 Thread.sleep(53000);
16 if(mp!=null){
17 mp.stop();
18 vibrator.cancel();
19 }else if(vibrator!=null){
20 vibrator.cancel();
21 }
22 } catch (InterruptedException e) {
23 // TODO Auto-generated catch block
24 e.printStackTrace();
25 }
26 }
27 }.start();
28 try {
29 //播放当前默认铃声
30 mp.setDataSource(this, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE));
31 mp.prepare();
32 mp.setLooping(true);
33 mp.start();
34 } catch (IllegalArgumentException e) {
35 // TODO Auto-generated catch block
36 e.printStackTrace();
37 } catch (SecurityException e) {
38 // TODO Auto-generated catch block
39 e.printStackTrace();
40 } catch (IllegalStateException e) {
41 // TODO Auto-generated catch block
42 e.printStackTrace();
43 } catch (IOException e) {
44 // TODO Auto-generated catch block
45 e.printStackTrace();
46 }
47 //设置震动
48 vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
49 long [] pattern = {700,1300,700,1300};
50 vibrator.vibrate(pattern,2);
51 String content=getIntent().getExtras().getString("content");
52 TextView dialog_content=(TextView) findViewById(R.id.dialog_content);
53 Button dialog_button_cancel=(Button)findViewById(R.id.dialog_button_cancel);
54 dialog_content.setText(content);
55 dialog_button_cancel.setOnClickListener(new OnClickListener() {
56
57 public void onClick(View v) {
58 finish();
59 }
60 });
61 }
62 @Override
63 protected void onStop() {
64 ScheduleViewAddActivity.setAlart(AlarmAlert.this);
65 if(mp!=null){
66 mp.stop();
67 vibrator.cancel();
68 }else if(vibrator!=null){
69 vibrator.cancel();
70 }
71 super.onStop();
72 }
73
74 }

5.然后我们还要设置真正能让alarm起作用的参数



 1 //设置闹钟,只能设置一个闹铃时间,所以在响铃过后要重新判断最近的时间重新设置闹铃
2 public static void setAlart(Context context){
3 ScheduleDAO dao1=new ScheduleDAO(context);
4 ArrayList<ScheduleVO> arrSch=dao1.getAllSchedule();
5 Calendar mCalendar = Calendar.getInstance();
6 mCalendar.setTimeInMillis(System.currentTimeMillis());
7 long time;
8 String content=arrSch.get(0).getScheduleContent();
9 time=arrSch.get(0).getAlartime();
10 for (ScheduleVO vo : arrSch) {
11 if(vo.getAlartime()>mCalendar.getTimeInMillis()){
12 if(time<mCalendar.getTimeInMillis()){
13 time=vo.getAlartime();
14 content=vo.getScheduleContent();
15 if(time>vo.getAlartime()){
16 time=vo.getAlartime();
17 content=vo.getScheduleContent();
18 }
19 }else{
20 if(time>vo.getAlartime()){
21 time=vo.getAlartime();
22 content=vo.getScheduleContent();
23 }
24 }
25 }
26 }
27 if(time>mCalendar.getTimeInMillis()){
28 }
29 }

6.最后绑定到每个日历事件中


 1     /**
2 * 通过选择提醒次数来处理最后的显示结果
3 * @param year
4 * @param month
5 * @param day
6 * @param hour
7 * @param minute
8 * @param week
9 * @param remindID
10 */
11 public String handleInfo(int year, int month, int day, int hour, int minute, String week, int remindID){
12 String remindType = remind[remindID]; //提醒类型
13 String show = "";
14 if(0 <= remindID && remindID <= 4){
15 //提醒一次,隔10分钟,隔30分钟,隔一小时
16 show = year+"-"+month+"-"+day+"\t"+hour+":"+minute+"\t"+week+"\t\t"+remindType;
17 }else if(remindID == 5){
18 //每周
19 show = "每周"+week+"\t"+hour+":"+minute;
20 }else if(remindID == 6){
21 //每月
22 show = "每月"+day+"号"+"\t"+hour+":"+minute;
23 }else if(remindID == 7){
24 //每年
25 show = "每年"+month+"-"+day+"\t"+hour+":"+minute;
26 }
27 return show;
28 }
29


 1     /**
2 * 设置日程标记日期
3 * @param remindID
4 * @param year
5 * @param month
6 * @param day
7 */
8 public void setScheduleDateTag(int remindID, String year, String month, String day,int scheduleID){
9 SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
10 String d = year+"-"+month+"-"+day;
11 Calendar cal = Calendar.getInstance();
12 try {
13 cal.setTime(format.parse(d));
14 } catch (ParseException e) {
15 // TODO Auto-generated catch block
16 e.printStackTrace();
17 }
18 //封装要标记的日期
19 if(remindID >= 0 && remindID <= 3){
20 //"提醒一次","隔10分钟","隔30分钟","隔一小时"(只需标记当前这一天)
21 ScheduleDateTag dateTag = new ScheduleDateTag();
22 dateTag.setYear(Integer.parseInt(year));
23 dateTag.setMonth(Integer.parseInt(month));
24 dateTag.setDay(Integer.parseInt(day));
25 dateTag.setScheduleID(scheduleID);
26 dateTagList.add(dateTag);
27 }else if(remindID == 4){
28 //每天重复(从设置的日程的开始的之后每一天多要标记)
29 for(int i =0; i <= (2049-Integer.parseInt(year))*12*4*7; i++){
30 if( i==0 ){
31 cal.add(Calendar.DATE, 0);
32 }else{
33 cal.add(Calendar.DATE, 1);
34 }
35 handleDate(cal,scheduleID);
36 }
37 }else if(remindID == 5){
38 //每周重复(从设置日程的这天(星期几),接下来的每周的这一天多要标记)
39 for(int i =0; i <= (2049-Integer.parseInt(year))*12*4; i++){
40 if( i==0 ){
41 cal.add(Calendar.WEEK_OF_MONTH, 0);
42 }else{
43 cal.add(Calendar.WEEK_OF_MONTH, 1);
44 }
45 handleDate(cal,scheduleID);
46 }
47 }else if(remindID == 6){
48 //每月重复(从设置日程的这天(几月几号),接下来的每月的这一天多要标记)
49 for(int i =0; i <= (2049-Integer.parseInt(year))*12; i++){
50 if( i==0 ){
51 cal.add(Calendar.MONTH, 0);
52 }else{
53 cal.add(Calendar.MONTH, 1);
54 }
55 handleDate(cal,scheduleID);
56 }
57 }else if(remindID == 7){
58 //每年重复(从设置日程的这天(哪一年几月几号),接下来的每年的这一天多要标记)
59 for(int i =0; i <= 2049-Integer.parseInt(year); i++){
60 if( i==0 ){
61 cal.add(Calendar.YEAR, 0);
62 }else{
63 cal.add(Calendar.YEAR, 1);
64 }
65 handleDate(cal,scheduleID);
66 }
67 }
68 //将标记日期存入数据库中
69 dao.saveTagDate(dateTagList);
70 }

【最后的总结】我们的Sprint3冲刺——闹钟的添加和管理(刘铸辉,何晓楠),布布扣,bubuko.com

时间: 2024-10-27 14:03:20

【最后的总结】我们的Sprint3冲刺——闹钟的添加和管理(刘铸辉,何晓楠)的相关文章

【Sprint3冲刺之前】日历表的事件处理和管理(刘铸辉)

我的Sprint2冲刺--日历表的事件处理和管理(刘铸辉,刘静) 我的Sprint2冲刺计划领到的任务是和静姐结对编程,完成日历表的事件处理和管理,下面详细讲解下技术细节. 1.设计结构图 首先要画出整个UI设计图,方便理解这个日历布局和日历样式的绘制. 这里总共分解为两个 View 文件: 1:calender_main.xml(Calender.java用来绘制日历表和日历表中的事件) 作为启动的主画面,新建项目时,首先生成. schedule_toptext:用来显示年月日,闰几月,年份和

团队开发最后一周冲刺第二天 董文轩 刘权毅 苏康奖 刘若凡 刘梦辉 常晓杨

今天是团队开发最后冲刺的第二天,首先任务分配如下图: 工作完成情况: 刘梦辉建立数据库如图:

【Sprint3冲刺之前】TD学生助手——alpha版发布

TD学生助手--alpha版发布 1.设想和目标  1.我们的软件要解决的问题 TD学生助手的主要核心思想就是帮助学生安排他们忙碌的学校生活.主要是通过以下几个方面 1.通过学生的需要进行分类(考试,实验,发博客等等),添加日程,保存日程到数据库中,将日程模块化管理: 2.用月视图和周视图,日视图三个视图来管理添加进去的日程,让日程管理起来更加直观,方便,增强用户体验. 2.是否有充足的时间来做计划 我们做计划主要是在Sprint计划刚开始的时候进行计划,并在以后实施计划时进行调整,但是由于我们

【Sprint3冲刺之前】TD学生助手测试用例

项目名称 TDzhushou 项目承担部门 骐骥之队 完成日期 2014/5/29 历史版本: 版本/状态 作者 参与者 起止日期 备注 TDzhushou1.1 解凤娇 骐骥之队 5/3-5/7 2014/5/8 一.功能测试用例 此功能测试用例对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求.这种测试的目标是核实数据的接受.处理和检索是否正确,以及业务规则的实施是否恰当.主要测试技术方法为用户通过GUI(图形用户界面)与应用程序交互,对交互的输出或接受进行分析,

sprint3冲刺总结

维持了一个多月的sprint3次总结终于结束了,我们小组也顺利的完成了我们的项目,总的来说这次完成的项目还是有一定的质量的,无论是外貌形象包装还是功能来说都达到了我们当初所设定的目标,美中不足的就是时间的问题了,由于最近的大作业和考证书比较多,所以有的时候忙于复习把导致项目的开发有所怠慢,不过总的质量还是可以达到老师所要求的.由于这个学习学了了android的开发,所以在完成项目的效率也比上一个学期的效率快上了不少,很多不懂的问题都可以通过书上或者网络上得以解决,更加值得庆幸的是我们小组的成员同

sprint3冲刺第一天

1.计划了sprint3要做的内容: 整合前台和后台,然后发布让用户使用,然后给我们反馈再进行改进 2.backlog表格: ID 任务 Est 做了什么 1 实现用户登录与权限判定 4 进行用户分类,比如说餐厅内部人员与点餐人员 2 历史经营数据查看 5 记录用户订餐的信息,方便推荐与再次查看记录 3 实现真正点餐功能 7 在app内点完餐之后,就会返回信息 4 美化界面 8 界面好看的话可以增加用餐者的食欲. 5 用户使用 体验效果

【Sprint3冲刺之前】TDzhushou软件项目测试计划书

TDzhushou软件测试计划文档 文档编号:2014-5-8 产品版本:1.1 产品名称:TDzhushou 文 档 作 者: 解凤娇       日期:2014-5-4 软件测试计划 目录 第一章 概述 3 1.1编写目的 3 1.2参考资料 3 1.3背景 3 第二章 目标 3 2.1测试的目的和任务 3 2.2人员和设备 3 2.3测试结果要求 4 2.4测试的安排和进度 4 第三章 测试种类及测试标准 5 3.1功能测试阶段 5 3.2系统测试阶段 6 3.3性能测试阶段 6 3.4安

【Sprint3冲刺之前】项目可行性研究报告

TD校园手机助手软件可行性研究报告 1.引言 在信息化时代高速发展的今天,手机成了每个人的必备物品之一.随着科技的迅猛发展,人们已经不仅仅满足于用手机发短信,打电话,因此,android手机应运而生,特别是近几年,其发展的速度更是惊人,它还提供了听歌.看视频.用蓝牙传输数据.玩游戏.上网等功能.我们的生活因此更加方便.为了更好地服务于铁大的学生,我们研究出一款校园手机助手的软件,方便同学们的生活. 1.1背景 1.1.1Android发展背景 Android是一套真正意义的开放性移动设备综合平台

【Sprint3冲刺之前】软件开发计划书

TD校园助手软件开发计划书 1.引言 1.1 编写目的 为了保证项目团队按时保质地完成项目目标,便于项目团队成员更好地了解项目情况,使项目工作开展的各个过程合理有序,同时便于老师和其他同学了解我们的项目进程安排以给出宝贵的意见建议,因此以文件化的形式,把对于在项目生命周期内的工作任务范围.各项工作的任务分解.项目团队组织结构.各团队成员的工作责任.团队内外沟通协作方式.开发进度.项目内外环境条件.风险对策等内容做出的安排以书面的方式,作为项目团队成员共识与约定,项目生命周期内的所有项目活动的行动