這個是設置定時提醒的功能,即設置幾點幾分后提醒,用的是給系統(tǒng)設置個時間點,當系統(tǒng)時間到達設置的時間點的時候就會給我們發(fā)送一個廣播,然后達到時間提醒功能
網站建設哪家好,找創(chuàng)新互聯公司!專注于網頁設計、網站建設、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯還提供了綏中免費建站歡迎大家使用!
網上找了很多,遇到了很多坑,經過摸索出來的,比如下面設置重復時間的第二個參數,網上有很多說是執(zhí)行提醒延時多少毫秒執(zhí)行,我用的刷了MIUI的三星手機測試怎么都不對,經過摸索測試才發(fā)現,原來不是,原來那個參數是設定的時間點的毫秒值!好了,不多說,看代碼:
/** * 開啟提醒 */ private void startRemind(){ //得到日歷實例,主要是為了下面的獲取時間 mCalendar = Calendar.getInstance(); mCalendar.setTimeInMillis(System.currentTimeMillis()); //獲取當前毫秒值 long systemTime = System.currentTimeMillis(); //是設置日歷的時間,主要是讓日歷的年月日和當前同步 mCalendar.setTimeInMillis(System.currentTimeMillis()); // 這里時區(qū)需要設置一下,不然可能個別手機會有8個小時的時間差 mCalendar.setTimeZone(TimeZone.getTimeZone("GMT+8")); //設置在幾點提醒 設置的為13點 mCalendar.set(Calendar.HOUR_OF_DAY, 13); //設置在幾分提醒 設置的為25分 mCalendar.set(Calendar.MINUTE, 25); //下面這兩個看字面意思也知道 mCalendar.set(Calendar.SECOND, 0); mCalendar.set(Calendar.MILLISECOND, 0); //上面設置的就是13點25分的時間點 //獲取上面設置的13點25分的毫秒值 long selectTime = mCalendar.getTimeInMillis(); // 如果當前時間大于設置的時間,那么就從第二天的設定時間開始 if(systemTime > selectTime) { mCalendar.add(Calendar.DAY_OF_MONTH, 1); } //AlarmReceiver.class為廣播接受者 Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); //得到AlarmManager實例 AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); //**********注意!!下面的兩個根據實際需求任選其一即可********* /** * 單次提醒 * mCalendar.getTimeInMillis() 上面設置的13點25分的時間點毫秒值 */ am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pi); /** * 重復提醒 * 第一個參數是警報類型;下面有介紹 * 第二個參數網上說法不一,很多都是說的是延遲多少毫秒執(zhí)行這個鬧鐘,但是我用的刷了MIUI的三星手機的實際效果是與單次提醒的參數一樣,即設置的13點25分的時間點毫秒值 * 第三個參數是重復周期,也就是下次提醒的間隔 毫秒值 我這里是一天后提醒 */ am.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), (1000 * 60 * 60 * 24), pi); } /** * 關閉提醒 */ private void stopRemind(){ Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); //取消警報 am.cancel(pi); Toast.makeText(this, "關閉了提醒", Toast.LENGTH_SHORT).show(); }
上面第一個參數的詳解:
AlarmManager.RTC,硬件鬧鐘,不喚醒手機(也可能是其它設備)休眠;當手機休眠時不發(fā)射鬧鐘。
AlarmManager.RTC_WAKEUP,硬件鬧鐘,當鬧鐘發(fā)躰時喚醒手機休眠;
AlarmManager.ELAPSED_REALTIME,真實時間流逝鬧鐘,不喚醒手機休眠;當手機休眠時不發(fā)射鬧鐘。
AlarmManager.ELAPSED_REALTIME_WAKEUP,真實時間流逝鬧鐘,當鬧鐘發(fā)躰時喚醒手機休眠;
RTC鬧鐘和ELAPSED_REALTIME最大的差別就是前者可以通過修改手機時間觸發(fā)鬧鐘事件,后者要通過真實時間的流逝,即使在休眠狀態(tài),時間也會被計算。
然后寫廣播接受者:
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //當系統(tǒng)到我們設定的時間點的時候會發(fā)送廣播,執(zhí)行這里 } }
最后別忘了給廣播接受者配置清單文件:
使用方法就直接調用啟動提醒或關閉提醒就行
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持創(chuàng)新互聯!