博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 中利用广播接收器(BroadCastReceiver)来接收定时响铃的闹铃信息
阅读量:7137 次
发布时间:2019-06-28

本文共 3533 字,大约阅读时间需要 11 分钟。

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

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

    

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

是一个小闹钟的完整过程,代码中关键的部分就是用到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,如需转载请自行联系原作者

你可能感兴趣的文章
20160327javaweb 之JSP入门
查看>>
NFS 挂载时提示:Root-NFS: Server returned error -13
查看>>
python整理&&集合学习
查看>>
深入浅出Node.js (10) - 测试
查看>>
如何在列表,字典,集合中根据条件筛选数据
查看>>
hibernate中文乱码问题
查看>>
006- 软件产品质量特性是什么?
查看>>
图片占位
查看>>
bs4 python解析html
查看>>
Hive篇---Hive与Hbase整合
查看>>
WPF系列:GridView列绑定控件(一)
查看>>
Eclipse常用快捷键
查看>>
个人项目博客----移山小分队----02
查看>>
完成构建之法第二章后面的小实践~
查看>>
java中的继承(二)
查看>>
课后作业-阅读任务-阅读提问-3
查看>>
坑爹的 ld: symbol(s) not found for architecture armv7
查看>>
Help Jimmy 递推动规
查看>>
Kali渗透测试——netdiscover
查看>>
数据结构之拓扑排序
查看>>