本文实例为大家分享了Android通过广播来实现闹钟的具体代码,供大家参考,具体内容如下
1.创建广播接收RepeatingAlarm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; public class RepeatingAlarm extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if (intent.getAction()!= null &&intent.getAction().equals( "com.gcc.alarm" )) { //自定义的action intent = new Intent(context,AlarmActivity. class ); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } } |
2.广播在Manifest.xml中配置:
1
2
3
4
5
6
7
|
< receiver android:name = ".RepeatingAlarm" > < intent-filter > < action android:name = "com.gcc.alarm" /> </ intent-filter > </ receiver > |
3.通过代码设置一个闹钟
1
2
3
4
5
6
7
|
Intent intent = new Intent( this , RepeatingAlarm. class ); intent.setAction( "com.gcc.alarm" ); PendingIntent sender = PendingIntent.getBroadcast( this , 0 , intent, 0 ); // Schedule the alarm! AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC, c.getTimeInMillis(), sender); //c为设置闹钟的时间的Calendar对象 |
4.通过代码取消一个闹钟:
1
2
3
4
5
6
7
8
9
10
11
|
/** * 取消闹钟 */ private void cancleAlarm(){ Intent intent = new Intent(AlarmActivity. this ,RepeatingAlarm. class ); intent.setAction( "com.gcc.alarm" ); PendingIntent sender = PendingIntent.getBroadcast(AlarmActivity. this , 0 , intent, 0 ); // And cancel the alarm. AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.cancel(sender); //取消闹钟 } |
5.闹钟响是弹出的对化框并播放音乐用AlarmActivity.java类实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.media.MediaPlayer; import android.os.Bundle; public class AlarmActivity extends Activity { MediaPlayer mp; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.aty_alarm); mp = new MediaPlayer(); AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep); try { mp.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength()); mp.prepare(); file.close(); } catch (IOException e) { e.printStackTrace(); } mp.setVolume( 0 .5f, 0 .5f); mp.setLooping( true ); mp.start(); alarmOialog(); } @Override protected void onResume() { super .onResume(); } @Override protected void onDestroy() { super .onDestroy(); if (mp != null ) { if (mp.isPlaying()) { mp.stop(); } mp.release(); } } public void alarmOialog() { AlertDialog.Builder builder = new AlertDialog.Builder( this ); builder.setMessage( "你有未处理的事件" ); builder.setPositiveButton( "稍后提醒" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { alarm(); finish(); } }); builder.setNegativeButton( "停止" , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { cancleAlarm(); finish(); // 关闭窗口 } }); builder.show().setCanceledOnTouchOutside( false ); ; } /** * 取消闹钟 */ private void cancleAlarm() { // Create the same intent, and thus a matching IntentSender, for // the one that was scheduled. Intent intent = new Intent(AlarmActivity. this , RepeatingAlarm. class ); intent.setAction( "com.gcc.alarm" ); PendingIntent sender = PendingIntent.getBroadcast(AlarmActivity. this , 0 , intent, 0 ); // And cancel the alarm. AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.cancel(sender); } private void alarm() { // 获取系统的闹钟服务 AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); // 触发闹钟的时间(毫秒) long triggerTime = System.currentTimeMillis() + 10000 ; Intent intent = new Intent( this , RepeatingAlarm. class ); intent.setAction( "com.gcc.alarm" ); PendingIntent op = PendingIntent.getBroadcast( this , 0 , intent, 0 ); // 启动一次只会执行一次的闹钟 am.set(AlarmManager.RTC, triggerTime, op); // 指定时间重复执行闹钟 // am.setRepeating(AlarmManager.RTC,triggerTime,2000,op); } } |
6.注:
1.aty_alarm.xml为空布局,不需添加任何组件
2.使用MediaPlayer播放res/raw目录下音频文件的方法如下:
1
2
3
4
5
|
mp = new MediaPlayer(); AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep); try { mp.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength()); |
7.功能不是很完善,需要的可以修改使用,闹钟时间设定可通过上篇博文来获取Calendar对象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_31028313/article/details/52689237