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,如需转载请自行联系原作者

相关文章
|
6月前
|
Java API 调度
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
Android系统 自定义开机广播,禁止后台服务,运行手动安装应用接收开机广播
329 0
|
6月前
|
安全 Android开发
Android 预置可卸载分区接收不到任何广播问题分析和解决
Android 预置可卸载分区接收不到任何广播问题分析和解决
204 0
|
6月前
|
Java Android开发
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
Android系统 修改无源码普通应用为默认Launcher和隐藏Settings中应用信息图标
839 0
|
1月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
227 2
|
5月前
|
设计模式 Android开发
44. 【Android教程】广播接收器:Broadcast Receiver
44. 【Android教程】广播接收器:Broadcast Receiver
94 2
|
5月前
|
存储 Android开发
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
详细解读Android获取已安装应用信息(图标,名称,版本号,包)
76 0
|
5月前
|
存储 Android开发 Kotlin
Kotlin开发安卓app,在使用 MediaPlayer 播放 res/raw 中的音乐时遇到突然中断的问题,而 onErrorListener 没有接收到任何报错
在使用 Android MediaPlayer 播放 res/raw 中的音乐时遇到中断问题,可能的原因包括资源问题、媒体文件编码格式、生命周期管理和设备资源配置。要排查问题,检查音频文件是否正确包含,格式编码是否支持,MediaPlayer 是否正确管理及释放,以及设备是否有足够存储和配置。通过设置 onErrorListener 日志和确保在 onDestroy 中释放资源来调试。如果文件过大,考虑使用 AssetManager。遵循这些步骤可帮助诊断并解决播放中断的问题。
|
6月前
|
Shell 开发工具 Android开发
android 修改kernel编译版本信息
android 修改kernel编译版本信息
87 0
|
6月前
|
Android开发
Android 获取签名信息
Android 获取签名信息
58 0
|
6月前
|
Shell Android开发
android mk中打印信息
android mk中打印信息
37 0