<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Android開發之自定義鬧鐘實現,供大家參考,具體內容如下
鬧鐘的佈局很簡單,就是一個簡單時間設定,所以自己寫一個簡單的佈局按鈕之類的也可以了,不過多贅述。另外使用時間對話方塊TimePickerDialog 去設定時間,用Calendar可獲取當前系統的時間。AlertDialog.THEME_HOLO_LIGHT是設定dialog的樣式,不設定的話就是一個預設的圓形時鐘,設定這個之後是一個可捲動上下滑動的時鐘樣式。程式碼展示:
//設定時間事件的點選 Calendar c = Calendar.getInstance(); // 建立一個TimePickerDialog範例,並把它顯示出來。 new TimePickerDialog(mContext, AlertDialog.THEME_HOLO_LIGHT, // 繫結監聽器 (tp, hourOfDay, minute) -> { try { if (hourOfDay > 22 || hourOfDay < 5) { Toast.makeText(mContext,"23:00~04:59,要好好睡覺的,這是長身體的黃金時間哦~", Toast.LENGTH_LONG).show(); } else { //一個補全顯示的時間 if(hourOfDay < 10 && minute > 10) { String times = "0" + hourOfDay + ":" + minute; tv_play.setText(times); }else if(minute < 10 && hourOfDay < 10) { String times = "0" + hourOfDay + ":" + "0"+ minute; tv_play.setText(times); } else if(minute < 10) { String times = hourOfDay + ":" + "0" + minute; tv_play.setText(times); } else { String times = hourOfDay + ":" + minute; tv_play.setText(times); } mDate = tv_play.getText().toString(); } } catch (Exception e) { e.printStackTrace(); } } //設定初始時間 , c.get(Calendar.HOUR_OF_DAY) , c.get(Calendar.MINUTE) //true表示採用24小時制 , true).show();
預設樣式
可捲動樣式
設定好的時鐘佈局顯示,在這個主頁面上看個人喜歡怎樣的佈局,可用listview或recycleview實現。在這裡我使用的是recycleView+gridlayoutManager顯示網格佈局,一行兩個卡片展示。使用介面卡去匹配recycleview會更好,因為這樣操作方便且美觀。
sqlite是一個安卓自帶的輕量級資料庫。增刪改查都是對資料庫的操作行為,另外使用sqlite去儲存時鐘的資料,就可以防止資料的丟失,因此可以在時鐘的基礎上做一個計劃提醒之類的,可以把計劃裡的內容儲存進資料庫裡,還有時間。可以在建立資料表的時候自帶一個自增的id,方便操作。資料庫的建表這些可以去搜尋編寫,很簡單,因此不多贅述。
/** * 轉儲資料,寫資料到資料庫中,增加資料 * @param sqLiteDatabase 資料庫 * @param context 內容 * @param repeat 重複 * @param date 時間 * @param count 時長 */ private void insertData(SQLiteDatabase sqLiteDatabase, String context, String repeat, String date, String count){ try { ContentValues values = new ContentValues(); values.put("context", context); values.put("repeat", repeat); values.put("time", date); values.put("count", count); sqLiteDatabase.insert("data",null, values);//新增功能 } catch (Exception e) { e.printStackTrace(); } } /** * 修改資料,寫資料到資料庫中,增加資料 * @param sqLiteDatabase 資料庫 * @param context 內容 * @param repeat 重複 * @param date 時間 * @param count 時長 */ private void updateData(SQLiteDatabase sqLiteDatabase, String context, String repeat, String date, String count){ try { ContentValues values = new ContentValues(); values.put("context", context); values.put("repeat", repeat); values.put("time", date); values.put("count", count); sqLiteDatabase.update("data",values,"id=?",new String[]{String.valueOf(mId)});//修改功能 } catch (Exception e) { e.printStackTrace(); } } /** * 刪除資料庫中的資料 * @param sqLiteDatabase 資料庫 * @param id id */ private void deleteData(SQLiteDatabase sqLiteDatabase, int id) { try { sqLiteDatabase.delete("data","id=?",new String[]{String.valueOf(id)}); } catch (Exception e) { e.printStackTrace(); } }
在上面的佈局裡,可以看到有個按鍵,點選它即可開啟鬧鐘提醒,關閉它即可關閉鬧鐘提醒。開啟鬧鐘的提示函數如下,將獲取的時間去與系統當前時間比較,AlarmManager設定提醒。關閉鬧鐘就是一個簡單的AlarmManager取消行為。那個提醒類就是平時見到的那種簡單的dialog提醒,所以不再次贅述。
/** * 開啟鬧鐘 * @param parent 父類別 * @param hour 小時 * @param minute 分鐘 * @param position 位置 */ private void startAlarm(ViewGroup parent, int hour, int minute, int position) { try { Calendar c = Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis());//獲取當前時間 //獲取當前毫秒值 long systemTime = System.currentTimeMillis(); c.setTimeZone(TimeZone.getTimeZone("GMT+8"));//設定時區 c.set(Calendar.HOUR_OF_DAY, hour);//設定幾點提醒 c.set(Calendar.MINUTE, minute);//設定幾分提醒 //獲取上面設定的時間 long selectTime = c.getTimeInMillis(); // 如果當前時間大於設定的時間,那麼就從第二天的設定時間開始 if (systemTime > selectTime) { c.add(Calendar.DAY_OF_MONTH, 1); } /* 鬧鐘時間到了的一個提醒類 */ Intent intent = new Intent(parent.getContext(), ListenerActivity.class); @SuppressLint("UnspecifiedImmutableFlag") PendingIntent pi = PendingIntent.getActivity(parent.getContext(), 0, intent, 0); //得到AlarmManager範例 AlarmManager am = (AlarmManager)parent.getContext().getSystemService(ALARM_SERVICE); //重複提醒 am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 60*60*1000*24, pi); } catch (Exception e) { e.printStackTrace(); } } /** * 關閉提醒 * @param parent 父類別 */ private void stopRemind(ViewGroup parent) { try { Intent intent = new Intent(parent.getContext(), ListenerActivity.class); @SuppressLint("UnspecifiedImmutableFlag") PendingIntent pi = PendingIntent.getActivity(parent.getContext(), 0, intent, 0); AlarmManager am = (AlarmManager)parent.getContext().getSystemService(ALARM_SERVICE); //取消提醒 am.cancel(pi); Toast.makeText(parent.getContext(), "關閉了提醒", Toast.LENGTH_SHORT).show(); Intent intents = new Intent("android.intent.action.BOOKCASE_RESTART"); @SuppressLint("UnspecifiedImmutableFlag") PendingIntent pis = PendingIntent.getBroadcast(parent.getContext(), 0, intents, 0); AlarmManager ams = (AlarmManager)parent.getContext().getSystemService(ALARM_SERVICE); //取消提醒 ams.cancel(pis); } catch (Exception e) { e.printStackTrace(); } }
這是本人最近寫的一個自定義鬧鐘提醒,程式碼並不是全部程式碼,但是主要的函數以及內容都以及在上面闡述了。小小的嘗試了一下,程式碼寫的也不是特別的好,但是功能效果也是實現了的,在這裡記錄一下思路還有程式碼,做一個學習筆記。希望各位大佬們多指教,也希望能給大家帶來一些靈感。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45