首頁 > 軟體

Android自定義定時鬧鐘開發

2022-09-12 18:01:57

本文範例為大家分享了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。


IT145.com E-mail:sddin#qq.com