Android简单闹钟程序
这个应用实现了简单的闹钟功能,关闭程序的状态中也可以进行闹钟的提醒。
这里遗留了一个问题: 如果我通过应用本身关闭程序,是可以实现我上述所说的功能,但是如果我在手机进程管理中实现应用程序的关闭操作,这个提醒就不起作用了,我很疑惑的是,我通过应用程序本身关闭了后,在进程中也是查看不到这个应用了的。所以哪位知道的帮留个言指点下,谢谢。
ClockDemo.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
|
package com.example.clock; import java.util.Calendar; import android.app.Activity; import android.app.AlertDialog; import android.app.TimePickerDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.TimePicker; public class ClockDemo extends Activity { private Button mSet; Calendar mCalendar = Calendar.getInstance(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); ObjectPool.mAlarmHelper = new AlarmHelper( this ); mSet = (Button) findViewById(R.id.mSet); setListener(); } public void setListener() { mSet.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { mCalendar.setTimeInMillis(System.currentTimeMillis()); int mHour = mCalendar.get(Calendar.HOUR_OF_DAY); int mMinute = mCalendar.get(Calendar.MINUTE); new TimePickerDialog(ClockDemo. this , new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mCalendar.setTimeInMillis(System .currentTimeMillis()); mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay); mCalendar.set(Calendar.MINUTE, minute); mCalendar.set(Calendar.SECOND, 0 ); mCalendar.set(Calendar.MILLISECOND, 0 ); ObjectPool.mAlarmHelper.openAlarm( 32 , "ddd" , "ffff" , mCalendar.getTimeInMillis()); } }, mHour, mMinute, true ).show(); } }); } @Override public boolean onKeyDown( int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { showBackDialog(); return true ; } return super .onKeyDown(keyCode, event); } /** Give the tip when exit the application. */ public void showBackDialog() { final AlertDialog.Builder builder = new AlertDialog.Builder( this ); builder.setTitle( "提示" ) .setIcon(R.drawable.icon) .setMessage( "是否退出?" ) .setPositiveButton( "sure" , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { System.exit( 0 ); android.os.Process .killProcess(android.os.Process.myPid()); dialog.dismiss(); } }) .setNegativeButton( "cancel" , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog ad = builder.create(); ad.show(); } } |
AlarmHelper.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
|
package com.example.clock; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; public class AlarmHelper { private Context c; private AlarmManager mAlarmManager; public AlarmHelper(Context c) { this .c = c; mAlarmManager = (AlarmManager) c .getSystemService(Context.ALARM_SERVICE); } public void openAlarm( int id, String title, String content, long time) { Intent intent = new Intent(); intent.putExtra( "_id" , id); intent.putExtra( "title" , title); intent.putExtra( "content" , content); intent.setClass(c, CallAlarm. class ); PendingIntent pi = PendingIntent.getBroadcast(c, id, intent, PendingIntent.FLAG_UPDATE_CURRENT); mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, pi); } public void closeAlarm( int id, String title, String content) { Intent intent = new Intent(); intent.putExtra( "_id" , id); intent.putExtra( "title" , title); intent.putExtra( "content" , content); intent.setClass(c, CallAlarm. class ); PendingIntent pi = PendingIntent.getBroadcast(c, id, intent, 0 ); mAlarmManager.cancel(pi); } } |
CallAlarm.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.example.clock; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class CallAlarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { intent.setClass(context, AlarmAlert. class ); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } |
AlarmAlert.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
|
package com.example.clock; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; public class AlarmAlert extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); new AlertDialog.Builder(AlarmAlert. this ) .setIcon(R.drawable.clock) .setTitle( "ddd" ) .setMessage( "fff" ) .setPositiveButton( "ddd" , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { System.exit( 0 ); android.os.Process .killProcess(android.os.Process.myPid()); } }).show(); } } |
ObjectPool.java
1
2
3
4
5
6
|
public class ObjectPool { /** The alarm object. */ public static AlarmHelper mAlarmHelper; } |
main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<? xml version = "1.0" encoding = "utf-8" ?> android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > < DigitalClock android:id = "@+id/dClock" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:textSize = "40sp" android:textColor = "@drawable/blue" /> < Button android:id = "@+id/mSet" android:layout_width = "100dp" android:layout_height = "wrap_content" android:text = "@string/str_button1" android:textColor = "@drawable/red" android:textSize = "18sp" /> </ LinearLayout > |
最后贴个配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<? xml version = "1.0" encoding = "utf-8" ?> package = "com.example.clock" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "7" /> < application android:icon = "@drawable/icon" android:label = "@string/app_name" > < activity android:name = ".ClockDemo" android:label = "@string/app_name" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > < receiver android:name = ".CallAlarm" /> < activity android:name = ".AlarmAlert" android:label = "@string/app_name" /> </ application > </ manifest > |
看了那么多,估计某些人又嫌烦了,我只贴上代码的目的是希望大家能看代码,而不是电脑上下了一个又一个的源文件,只知道用而不关心其中的技术点,这样就不能举一番三了。
为了不同的同学,还是贴上源文件吧在。
源码下载:ClockDemo.rar