最近写了个闹钟的程序,看到SharedPreferences在一个程序中可以共享数据,SharedPreferences是一个轻量级的键值存储机制,只可以存储基本数据类型。我就拿来用用,没想到SharedPreferences太好了,真是轻量级的保存数据的好的工具,比sqlite好用多了!以后我又多了一种编程思想了,呵呵,所以现在分享给大家,特别注意这点:这个无法直接在多个程序间共享Preferences数据。程序关闭再打开时间仍然保留你上次设置的时间。这就是Preferences的作用!
程序欢迎界面:
点击设置闹钟界面:
点击闹钟设置中的设置后的界面:
闹钟时间到了弹出dialog:
设置重复想起闹钟后的界面:
点击返回键弹出的提示:
下面请看代码:
一、MainActivity中的代码:
复制代码
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353package com.cn.daming; import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.AlertDialog; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; public class MainActivity extends Activity { TextView setTime1; TextView setTime2; TextView setTime3; Button mButton1; Button mButton2; Button mButton3; Button mButton4; Button mButton5; Button mButton6; String time1String = null; String time2String = null; String time3String = null; String defalutString = "目前无设置"; AlertDialog builder = null; Calendar c=Calendar.getInstance(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //取得活动的Preferences对象 SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE); time1String = settings.getString("TIME1", defalutString); time2String = settings.getString("TIME2", defalutString); time3String = settings.getString("TIME3", defalutString); InitButton1(); InitButton2(); InitButton3(); InitButton4(); InitButton5(); InitButton6(); setTime1.setText(time1String); setTime3.setText(time2String); setTime2.setText(time3String); } public void InitButton1() { setTime1=(TextView) findViewById(R.id.setTime1); mButton1=(Button)findViewById(R.id.mButton1); mButton1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { c.setTimeInMillis(System.currentTimeMillis()); int mHour=c.get(Calendar.HOUR_OF_DAY); int mMinute=c.get(Calendar.MINUTE); new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view,int hourOfDay, int minute) { c.setTimeInMillis(System.currentTimeMillis()); c.set(Calendar.HOUR_OF_DAY,hourOfDay); c.set(Calendar.MINUTE,minute); c.set(Calendar.SECOND,0); c.set(Calendar.MILLISECOND,0); Intent intent = new Intent(MainActivity.this, CallAlarm.class); PendingIntent sender=PendingIntent.getBroadcast( MainActivity.this,0, intent, 0); AlarmManager am; am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), sender ); String tmpS=format(hourOfDay)+":"+format(minute); setTime1.setText(tmpS); //SharedPreferences保存数据,并提交 SharedPreferences time1Share = getPreferences(0); SharedPreferences.Editor editor = time1Share.edit(); editor.putString("TIME1", tmpS); editor.commit(); Toast.makeText(MainActivity.this,"设置大明闹钟时间为"+tmpS, Toast.LENGTH_SHORT) .show(); } },mHour,mMinute,true).show(); } }); } public void InitButton2() { mButton2=(Button) findViewById(R.id.mButton2); mButton2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, CallAlarm.class); PendingIntent sender=PendingIntent.getBroadcast( MainActivity.this,0, intent, 0); AlarmManager am; am =(AlarmManager)getSystemService(ALARM_SERVICE); am.cancel(sender); Toast.makeText(MainActivity.this,"大明闹钟时间删除", Toast.LENGTH_SHORT).show(); setTime1.setText("目前无设置"); SharedPreferences time1Share = getPreferences(0); SharedPreferences.Editor editor = time1Share.edit(); editor.putString("TIME1", "目前无设置"); editor.commit(); } }); } public void InitButton3() { setTime3=(TextView) findViewById(R.id.setTime5); mButton3=(Button)findViewById(R.id.mButton5); mButton3.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { c.setTimeInMillis(System.currentTimeMillis()); int mHour=c.get(Calendar.HOUR_OF_DAY); int mMinute=c.get(Calendar.MINUTE); new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view,int hourOfDay, int minute) { c.setTimeInMillis(System.currentTimeMillis()); c.set(Calendar.HOUR_OF_DAY,hourOfDay); c.set(Calendar.MINUTE,minute); c.set(Calendar.SECOND,0); c.set(Calendar.MILLISECOND,0); Intent intent = new Intent(MainActivity.this, CallAlarm.class); PendingIntent sender=PendingIntent.getBroadcast( MainActivity.this,1, intent, 0); AlarmManager am; am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), sender ); String tmpS=format(hourOfDay)+":"+format(minute); setTime3.setText(tmpS); //SharedPreferences保存数据,并提交 SharedPreferences time2Share = getPreferences(1); SharedPreferences.Editor editor = time2Share.edit(); editor.putString("TIME2", tmpS); editor.commit(); Toast.makeText(MainActivity.this,"设置大明闹钟时间为"+tmpS, Toast.LENGTH_SHORT) .show(); } },mHour,mMinute,true).show(); } }); } public void InitButton4() { mButton4=(Button) findViewById(R.id.mButton6); mButton4.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, CallAlarm.class); PendingIntent sender=PendingIntent.getBroadcast( MainActivity.this,0, intent, 0); AlarmManager am; am =(AlarmManager)getSystemService(ALARM_SERVICE); am.cancel(sender); Toast.makeText(MainActivity.this,"大明闹钟时间删除", Toast.LENGTH_SHORT).show(); setTime3.setText("目前无设置"); //SharedPreferences保存数据,并提交 SharedPreferences time2Share = getPreferences(1); SharedPreferences.Editor editor = time2Share.edit(); editor.putString("TIME2", "目前无设置"); editor.commit(); } }); } public void InitButton5() { setTime2=(TextView) findViewById(R.id.setTime2); LayoutInflater factory = LayoutInflater.from(this); final View setView = factory.inflate(R.layout.timeset,null); final TimePicker tPicker=(TimePicker)setView .findViewById(R.id.tPicker); tPicker.setIs24HourView(true); final AlertDialog di=new AlertDialog.Builder(MainActivity.this) .setIcon(R.drawable.clock) .setTitle("设置") .setView(setView) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { EditText ed=(EditText)setView.findViewById(R.id.mEdit); int times=Integer.parseInt(ed.getText().toString()) *1000; c.setTimeInMillis(System.currentTimeMillis()); c.set(Calendar.HOUR_OF_DAY,tPicker.getCurrentHour()); c.set(Calendar.MINUTE,tPicker.getCurrentMinute()); c.set(Calendar.SECOND,0); c.set(Calendar.MILLISECOND,0); Intent intent = new Intent(MainActivity.this, CallAlarm.class); PendingIntent sender = PendingIntent.getBroadcast( MainActivity.this,1, intent, 0); AlarmManager am; am = (AlarmManager)getSystemService(ALARM_SERVICE); am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),times,sender); String tmpS=format(tPicker.getCurrentHour())+":"+ format(tPicker.getCurrentMinute()); String subStr = "设置大明闹钟时间为"+tmpS+ "开始,重复间隔为"+times/1000+"秒"; setTime2.setText("设置大明闹钟时间为"+tmpS+ "开始,重复间隔为"+times/1000+"秒"); //SharedPreferences保存数据,并提交 SharedPreferences time3Share = getPreferences(2); SharedPreferences.Editor editor = time3Share.edit(); editor.putString("TIME3", subStr); editor.commit(); Toast.makeText(MainActivity.this,"设置大明闹钟为"+tmpS+ "开始,重复间隔为"+times/1000+"秒", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).create(); mButton5=(Button) findViewById(R.id.mButton3); mButton5.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { c.setTimeInMillis(System.currentTimeMillis()); tPicker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY)); tPicker.setCurrentMinute(c.get(Calendar.MINUTE)); di.show(); } }); } public void InitButton6() { mButton6=(Button) findViewById(R.id.mButton4); mButton6.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, CallAlarm.class); PendingIntent sender = PendingIntent.getBroadcast( MainActivity.this,1, intent, 0); AlarmManager am; am = (AlarmManager)getSystemService(ALARM_SERVICE); am.cancel(sender); Toast.makeText(MainActivity.this,"闹钟时间删除", Toast.LENGTH_SHORT).show(); setTime2.setText("目前无设置"); //SharedPreferences保存数据,并提交 SharedPreferences time3Share = getPreferences(2); SharedPreferences.Editor editor = time3Share.edit(); editor.putString("TIME3", "目前无设置"); editor.commit(); } }); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ builder = new AlertDialog.Builder(MainActivity.this) .setIcon(R.drawable.clock) .setTitle("温馨提示:") .setMessage("您是否要退出大明闹钟程序!!!") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { MainActivity.this.finish(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { builder.dismiss(); } }).show(); } return true; } private String format(int x) { String s=""+x; if(s.length()==1) s="0"+s; return s; } }
二、CallAlarm中的代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.cn.daming; import android.content.Context; import android.content.Intent; import android.content.BroadcastReceiver; import android.os.Bundle; public class CallAlarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent i = new Intent(context, AlarmAlert.class); Bundle bundleRet = new Bundle(); bundleRet.putString("STR_CALLER", ""); i.putExtras(bundleRet); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
三、AlarmAlert中的代码:
复制代码
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
28package com.cn.daming; 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("大明闹钟响了!!") .setMessage("快完成你制定的计划吧!!!") .setPositiveButton("关掉它", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { AlarmAlert.this.finish(); } }) .show(); } }
四、main.xml布局文件的代码:
复制代码
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/other" > <DigitalClock android:id="@+id/dClock" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40sp" android:textColor="@drawable/blue" android:layout_x="70px" android:layout_y="32px" > </DigitalClock> <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_title3" android:textSize="20sp" android:textColor="@drawable/black" android:layout_x="10px" android:layout_y="104px" > </TextView> <Button android:id="@+id/mButton1" android:layout_width="wrap_content" android:layout_height="40px" android:text="@string/str_button1" android:textColor="@drawable/black" android:textSize="18sp" android:layout_x="190px" android:layout_y="102px" > </Button> <TextView android:id="@+id/setTime1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_default" android:textColor="@drawable/red" android:textSize="16sp" android:layout_x="10px" android:layout_y="149px" > </TextView> <Button android:id="@+id/mButton2" android:layout_width="wrap_content" android:layout_height="40px" android:text="@string/str_button2" android:textColor="@drawable/black" android:textSize="18sp" android:layout_x="190px" android:layout_y="142px" > </Button> <TextView android:id="@+id/text5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_title4" android:textSize="20sp" android:textColor="@drawable/black" android:layout_x="10px" android:layout_y="216px" > </TextView> <Button android:id="@+id/mButton5" android:layout_width="wrap_content" android:layout_height="40px" android:text="@string/str_button1" android:textColor="@drawable/black" android:textSize="18sp" android:layout_x="190px" android:layout_y="212px" > </Button> <TextView android:id="@+id/setTime5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_default" android:textColor="@drawable/red" android:textSize="16sp" android:layout_x="10px" android:layout_y="259px" > </TextView> <Button android:id="@+id/mButton6" android:layout_width="wrap_content" android:layout_height="40px" android:text="@string/str_button2" android:textColor="@drawable/black" android:textSize="18sp" android:layout_x="190px" android:layout_y="252px" > </Button> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_title2" android:textSize="20sp" android:textColor="@drawable/black" android:layout_x="10px" android:layout_y="326px" > </TextView> <Button android:id="@+id/mButton3" android:layout_width="wrap_content" android:layout_height="40px" android:text="@string/str_button1" android:textColor="@drawable/black" android:textSize="18sp" android:layout_x="190px" android:layout_y="322px" > </Button> <TextView android:id="@+id/setTime2" android:layout_width="170px" android:layout_height="wrap_content" android:text="@string/str_default" android:textColor="@drawable/red" android:textSize="16sp" android:layout_x="10px" android:layout_y="369px" > </TextView> <Button android:id="@+id/mButton4" android:layout_width="wrap_content" android:layout_height="40px" android:text="@string/str_button2" android:textColor="@drawable/black" android:textSize="18sp" android:layout_x="190px" android:layout_y="362px" > </Button> </AbsoluteLayout>
五、timeset.xml布局文件中的代码:
复制代码
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<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/layout2" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <TextView android:id="@+id/text1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_text1" android:textColor="@drawable/white" android:textSize="16sp" android:layout_x="10px" android:layout_y="32px" > </TextView> <TextView android:id="@+id/text2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_text2" android:textColor="@drawable/white" android:textSize="16sp" android:layout_x="10px" android:layout_y="172px" > </TextView> <TimePicker android:id="@+id/tPicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="100px" android:layout_y="12px" > </TimePicker> <EditText android:id="@+id/mEdit" android:layout_width="52px" android:layout_height="40px" android:text="15" android:textSize="16sp" android:layout_x="120px" android:layout_y="162px" > </EditText> <TextView android:id="@+id/text3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/str_text3" android:textColor="@drawable/white" android:textSize="16sp" android:layout_x="180px" android:layout_y="172px" > </TextView> </AbsoluteLayout>
六、string.xml中的代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, EX06_10</string> <string name="app_name">大明原创闹钟</string> <string name="str_button1">设置闹钟</string> <string name="str_button2">删除闹钟</string> <string name="str_title2">重复响起的闹钟</string> <string name="str_title3">大明闹钟一</string> <string name="str_title4">大明闹钟二</string> <string name="str_default">目前无设置</string> <string name="str_text1">开始时间</string> <string name="str_text2">重复响起的闹钟</string> <string name="str_text3">秒</string> </resources>
七、color.xml中的代码:
复制代码
1
2
3
4
5
6
7
8<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="white">#FFFFFFFF</drawable> <drawable name="other">#FF00FFF0</drawable> <drawable name="black">#000000</drawable> <drawable name="blue">#0000FF</drawable> <drawable name="red">#FF0000</drawable> </resources>
八、AndroidManifest.xml中的代码
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.cn.daming" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <!-- 註冊receiver CallAlarm --> <receiver android:name=".CallAlarm" android:process=":remote" /> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AlarmAlert" android:label="@string/app_name"> </activity> </application> </manifest>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。
最后
以上就是阳光导师最近收集整理的关于Android实现闹钟小程序的全部内容,更多相关Android实现闹钟小程序内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复