Android 中利用广播接收器(BroadCastReceiver)来接收定时响铃的闹铃信息

简介:

  刚开始做东西得时候很不了解android中一些组件的应用方法,找了一个闹钟的小例子来更好的理解广播的接收.

   应用程序的界面是这样的,这个例子是用闹钟的制定与解除来穿插broadcast  Receiver 的知识,不说废话了,先看下应用程序的界面:

    1

  点击设定闹钟的按钮,弹出来一个设置时间的对话框,你选择时间之后会弹出一个Toast告诉你定的时间时多少,然后到时间之后弹出对话框提示时间到。先看图:

234

是一个小闹钟的完整过程,代码中关键的部分就是用到AlarmManager控制时间和PendingIntent 捕获要执行的广播,先贴代码再详细讲解代码。

1     mButton1 . setOnClickListener( new   View . OnClickListener() 
2           { 
3               public   void   onClick(View   v) 
4               {   /*   取得按下按钮时的时间做为TimePickerDialog的默认值   */ 
5                   c . setTimeInMillis(System . currentTimeMillis()); 
6                   startCalendar . setTimeInMillis(System . currentTimeMillis()); 
7                   int   mHour   =   c . get(Calendar . HOUR_OF_DAY); 
8                   int   mMinute   =   c . get(Calendar . MINUTE);   /*   跳出TimePickerDialog来设定时间   */ 
9                   new   TimePickerDialog(SetAlarmActivity . this , 
10                          new   TimePickerDialog . OnTimeSetListener() 
11                          { 
12                              public   void   onTimeSet(TimePicker   view,   int   hourOfDay, 
13                                      int   minute) 
14                              {   /*   取得设定后的时间,秒跟毫秒设为0   */ 
15                                  c . setTimeInMillis(System . currentTimeMillis()); 
16                                  c . set(Calendar . HOUR_OF_DAY,   hourOfDay); 
17                                  c . set(Calendar . MINUTE,   minute); 
18                                  c . set(Calendar . SECOND,   0 ); 
19                                  c . set(Calendar . MILLISECOND,   0 ); 
20                                  Intent   intent   =   new   Intent(SetAlarmActivity . this , 
21                                          CallAlarm . class ); 
22                                  PendingIntent   sender   =   PendingIntent . getBroadcast( 
23                                          SetAlarmActivity . this ,   0 ,   intent,   0 ); 
24                                  AlarmManager   am; 
25                                  am   =   (AlarmManager)   getSystemService(ALARM_SERVICE); 
26                                  am . set(AlarmManager . RTC_WAKEUP,   c . getTimeInMillis(), 
27                                          sender);   /*   更新显示的设定闹钟时间   */ 
28                                  String   tmpS   =   format(hourOfDay)   +   " "   +   format(minute); 
29                                  setTime1 . setText(tmpS);   /*   以Toast提示设定已完成   */ 
30                                  Toast . makeText(SetAlarmActivity . this ,   " 设定闹钟时间为 "   +   tmpS, 
31                                          Toast . LENGTH_SHORT) . show(); 
32 
33                              } 
34                          } ,   mHour,   mMinute,   true ) . show(); 
35              } 
36          } ); 
 

代码中显示了当点击按钮之后所进行的代码处理,我们获得了设置的时间,然后用了一个Intent,用了一个pendIntent,这个PendIntent在捕获广播的时候才会启动,然后我们将这个PendIntent绑定到AlarmManager上面,有三个参数,一个是时间格式,一个是响铃的时间,一个是闹铃到期时启动sender这个PendIntent对象,然后启动绑定在PendIntent里面的intent,从而启动广播CallAlarm。

在广播接收器CallAlar中,并不是直接执行代码,广播接收器只有一个onReceive方法,在这个方法里面又启动了另外一个Activity。需要说明的是广播接收器是没有界面的.

1   package   com . cz;   /*   import相关class   */ 
2  
3   import   android . content . Context; 
4   import   android . content . Intent; 
5   import   android . content . BroadcastReceiver; 
6   import   android . os . Bundle;   /*   调用闹钟Alert的Receiver   */ 
7  
8   public   class   CallAlarm   extends   BroadcastReceiver 
9   { 
10      @Override 
11      public   void   onReceive(Context   context,   Intent   intent) 
12      {   /*   create   Intent,调用AlarmAlert.class   */ 
13          Intent   i   =   new   Intent(context,   AlarmAlert . class ); 
14          Bundle   bundleRet   =   new   Bundle(); 
15          bundleRet . putString( " STR_CALLER " ,   " " ); 
16          i . putExtras(bundleRet); 
17          i . addFlags(Intent . FLAG_ACTIVITY_NEW_TASK); 
18          context . startActivity(i); 
19      } 
20  } 
 

启动另外一个Activity,是弹出闹铃时间到时的提示对话框,看下代码:

1   package   com . cz;   /*   import相关class   */ 
2  
3   import   android . app . Activity; 
4   import   android . app . AlertDialog; 
5   import   android . content . DialogInterface; 
6   import   android . os . Bundle; 
7  
8   public   class   AlarmAlert   extends   Activity 
9   { 
10      @Override 
11      protected   void   onCreate(Bundle   savedInstanceState) 
12      { 
13          super . onCreate(savedInstanceState);   /*   跳出的闹铃警示   */ 
14          new   AlertDialog . Builder(AlarmAlert . this ) . setIcon(R . drawable . clock) 
15                  . setTitle( " 闹钟响了!! " ) . setMessage( " 赶快起床吧!!! " ) . setPositiveButton( 
16                          " 关掉他 " ,   new   DialogInterface . OnClickListener() 
17                          { 
18                              public   void   onClick(DialogInterface   dialog, 
19                                      int   whichButton) 
20                              {   /*   关闭Activity   */ 
21                                  AlarmAlert . this . finish(); 
22                              } 
23                          } ) . show(); 
24      } 
25  } 
 

如果条件允许,还可以在响铃时加上震动,铃声等选项..



本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/628428,如需转载请自行联系原作者

相关文章
|
8天前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
37 0
|
9天前
|
安全 Android开发
Android 预置可卸载分区接收不到任何广播问题分析和解决
Android 预置可卸载分区接收不到任何广播问题分析和解决
25 0
|
3月前
|
设计模式 Android开发
[Android 四大组件] --- BroadcastReceiver
[Android 四大组件] --- BroadcastReceiver
34 0
|
29天前
|
编解码 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)1
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)
47 1
|
5月前
|
XML Java Android开发
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
Android App开发网络通信中使用okhttp下载和上传图片、文件讲解及实战(超详细实现用户注册信息上传 附源码)
158 0
|
8天前
|
Java Android开发
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
23 0
|
29天前
|
编解码 开发工具 Android开发
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
Android获取设备各项信息(设备id、ip地址、设备名称、运行商、品牌、型号、分辨率、处理器、国家码、系统语言、网络类型、oaid、android版本、操作系统版本、mac地址、应用程序签名..)2
27 2
|
9天前
|
测试技术 Android开发
Android App获取不到pkgInfo信息问题原因
Android App获取不到pkgInfo信息问题原因
17 0
|
9天前
|
存储 缓存 安全
Rockchip系列之RK3568 Android设备固件和分区信息
Rockchip系列之RK3568 Android设备固件和分区信息
18 0
|
3月前
|
数据库 Android开发 数据库管理
【Android】使用android studio查看内置数据库信息
【Android】使用android studio查看内置数据库信息
77 0