600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android 定时响铃 Android 中利用广播接收器(BroadCastReceiver)来接收定时响铃的闹铃信息...

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

时间:2022-08-21 12:19:18

相关推荐

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

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

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

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

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

1 mButton1.setOnClickListener(newView.OnClickListener()

2 {

3 publicvoidonClick(Viewv)

4 {/*取得按下按钮时的时间做为TimePickerDialog的默认值*/

5 c.setTimeInMillis(System.currentTimeMillis());

6 startCalendar.setTimeInMillis(System.currentTimeMillis());

7 intmHour=c.get(Calendar.HOUR_OF_DAY);

8 intmMinute=c.get(Calendar.MINUTE);/*跳出TimePickerDialog来设定时间*/

9 newTimePickerDialog(SetAlarmActivity.this,

10 newTimePickerDialog.OnTimeSetListener()

11 {

12 publicvoidonTimeSet(TimePickerview,inthourOfDay,

13 intminute)

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 Intentintent=newIntent(SetAlarmActivity.this,

21 CallAlarm.class);

22 PendingIntentsender=PendingIntent.getBroadcast(

23 SetAlarmActivity.this,0,intent,0);

24 AlarmManageram;

25 am=(AlarmManager)getSystemService(ALARM_SERVICE);

26 am.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),

27 sender);/*更新显示的设定闹钟时间*/

28 StringtmpS=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 packagecom.cz;/*import相关class*/

2

3 importandroid.content.Context;

4 importandroid.content.Intent;

5 importandroid.content.BroadcastReceiver;

6 importandroid.os.Bundle;/*调用闹钟Alert的Receiver*/

7

8 publicclassCallAlarmextendsBroadcastReceiver

9 {

10 @Override

11 publicvoidonReceive(Contextcontext,Intentintent)

12 {/*createIntent,调用AlarmAlert.class*/

13 Intenti=newIntent(context,AlarmAlert.class);

14 BundlebundleRet=newBundle();

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 packagecom.cz;/*import相关class*/

2

3 importandroid.app.Activity;

4 importandroid.app.AlertDialog;

5 importandroid.content.DialogInterface;

6 importandroid.os.Bundle;

7

8 publicclassAlarmAlertextendsActivity

9 {

10 @Override

11 protectedvoidonCreate(BundlesavedInstanceState)

12 {

13 super.onCreate(savedInstanceState);/*跳出的闹铃警示*/

14 newAlertDialog.Builder(AlarmAlert.this).setIcon(R.drawable.clock)

15 .setTitle("闹钟响了!!").setMessage("赶快起床吧!!!").setPositiveButton(

16 "关掉他",newDialogInterface.OnClickListener()

17 {

18 publicvoidonClick(DialogInterfacedialog,

19 intwhichButton)

20 {/*关闭Activity*/

21 AlarmAlert.this.finish();

22 }

23 }).show();

24 }

25 }

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

附上源码.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。