Android實(shí)現(xiàn)每天定時提醒功能
這個是設(shè)置定時提醒的功能,即設(shè)置幾點(diǎn)幾分后提醒,用的是給系統(tǒng)設(shè)置個時間點(diǎn),當(dāng)系統(tǒng)時間到達(dá)設(shè)置的時間點(diǎn)的時候就會給我們發(fā)送一個廣播,然后達(dá)到時間提醒功能
網(wǎng)上找了很多,遇到了很多坑,經(jīng)過摸索出來的,比如下面設(shè)置重復(fù)時間的第二個參數(shù),網(wǎng)上有很多說是執(zhí)行提醒延時多少毫秒執(zhí)行,我用的刷了MIUI的三星手機(jī)測試怎么都不對,經(jīng)過摸索測試才發(fā)現(xiàn),原來不是,原來那個參數(shù)是設(shè)定的時間點(diǎn)的毫秒值!好了,不多說,看代碼:
/**
* 開啟提醒
*/
private void startRemind(){
//得到日歷實(shí)例,主要是為了下面的獲取時間
mCalendar = Calendar.getInstance();
mCalendar.setTimeInMillis(System.currentTimeMillis());
//獲取當(dāng)前毫秒值
long systemTime = System.currentTimeMillis();
//是設(shè)置日歷的時間,主要是讓日歷的年月日和當(dāng)前同步
mCalendar.setTimeInMillis(System.currentTimeMillis());
// 這里時區(qū)需要設(shè)置一下,不然可能個別手機(jī)會有8個小時的時間差
mCalendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
//設(shè)置在幾點(diǎn)提醒 設(shè)置的為13點(diǎn)
mCalendar.set(Calendar.HOUR_OF_DAY, 13);
//設(shè)置在幾分提醒 設(shè)置的為25分
mCalendar.set(Calendar.MINUTE, 25);
//下面這兩個看字面意思也知道
mCalendar.set(Calendar.SECOND, 0);
mCalendar.set(Calendar.MILLISECOND, 0);
//上面設(shè)置的就是13點(diǎn)25分的時間點(diǎn)
//獲取上面設(shè)置的13點(diǎn)25分的毫秒值
long selectTime = mCalendar.getTimeInMillis();
// 如果當(dāng)前時間大于設(shè)置的時間,那么就從第二天的設(shè)定時間開始
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實(shí)例
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//**********注意!!下面的兩個根據(jù)實(shí)際需求任選其一即可*********
/**
* 單次提醒
* mCalendar.getTimeInMillis() 上面設(shè)置的13點(diǎn)25分的時間點(diǎn)毫秒值
*/
am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pi);
/**
* 重復(fù)提醒
* 第一個參數(shù)是警報類型;下面有介紹
* 第二個參數(shù)網(wǎng)上說法不一,很多都是說的是延遲多少毫秒執(zhí)行這個鬧鐘,但是我用的刷了MIUI的三星手機(jī)的實(shí)際效果是與單次提醒的參數(shù)一樣,即設(shè)置的13點(diǎn)25分的時間點(diǎn)毫秒值
* 第三個參數(shù)是重復(fù)周期,也就是下次提醒的間隔 毫秒值 我這里是一天后提醒
*/
am.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), (1000 * 60 * 60 * 24), pi);
}
/**
* 關(guān)閉提醒
*/
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, "關(guān)閉了提醒", Toast.LENGTH_SHORT).show();
}
上面第一個參數(shù)的詳解:
AlarmManager.RTC,硬件鬧鐘,不喚醒手機(jī)(也可能是其它設(shè)備)休眠;當(dāng)手機(jī)休眠時不發(fā)射鬧鐘。
AlarmManager.RTC_WAKEUP,硬件鬧鐘,當(dāng)鬧鐘發(fā)躰時喚醒手機(jī)休眠;
AlarmManager.ELAPSED_REALTIME,真實(shí)時間流逝鬧鐘,不喚醒手機(jī)休眠;當(dāng)手機(jī)休眠時不發(fā)射鬧鐘。
AlarmManager.ELAPSED_REALTIME_WAKEUP,真實(shí)時間流逝鬧鐘,當(dāng)鬧鐘發(fā)躰時喚醒手機(jī)休眠;
RTC鬧鐘和ELAPSED_REALTIME最大的差別就是前者可以通過修改手機(jī)時間觸發(fā)鬧鐘事件,后者要通過真實(shí)時間的流逝,即使在休眠狀態(tài),時間也會被計算。
然后寫廣播接受者:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//當(dāng)系統(tǒng)到我們設(shè)定的時間點(diǎn)的時候會發(fā)送廣播,執(zhí)行這里
}
}
最后別忘了給廣播接受者配置清單文件:
<receiver android:name=".receiver.AlarmReceiver" android:process=":remote" />
使用方法就直接調(diào)用啟動提醒或關(guān)閉提醒就行
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
- Android4.4開發(fā)之電池低電量告警提示原理與實(shí)現(xiàn)方法分析
- Android后臺定時提醒功能實(shí)現(xiàn)
- Android基于廣播事件機(jī)制實(shí)現(xiàn)簡單定時提醒功能代碼
- android獲取情景模式和鈴聲 實(shí)現(xiàn)震動、鈴聲提醒
- 詳解Android中Notification通知提醒
- Android編程設(shè)置提醒事件的方法
- Android高仿微信5.2.1主界面及消息提醒
- Android提醒微技巧你真的了解Dialog、Toast和Snackbar嗎
- Android 開發(fā)之Dialog,Toast,Snackbar提醒
- Android開發(fā)之使用通知欄顯示提醒信息的方法
- Android編程實(shí)現(xiàn)添加低電流提醒功能的方法
相關(guān)文章
Android 讓自定義TextView的drawableLeft與文本一起居中
本文主要介紹Android 自定義控件TextView顯示居中問題,在開發(fā)過程中經(jīng)常會遇到控件的重寫,這里主要介紹TextView的drawableLeft與文本一起居中的問題2016-07-07
Android App使用RecyclerView實(shí)現(xiàn)上拉和下拉刷新的方法
RecyclerView一經(jīng)推出便被認(rèn)為是替代ListView的存在,那么ListView的上拉和下拉刷新我們同樣可以使用RecyclerView來做到,這里我們就來看一下Android App使用RecyclerView實(shí)現(xiàn)上拉和下拉刷新的方法,首先先來點(diǎn)RecyclerView的小介紹:2016-06-06
Android開發(fā)實(shí)現(xiàn)AlertDialog中View的控件設(shè)置監(jiān)聽功能分析
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)AlertDialog中View的控件設(shè)置監(jiān)聽功能,結(jié)合實(shí)例形式分析了Android針對AlertDialog中的控件使用View進(jìn)行監(jiān)聽的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實(shí)例詳解
這篇文章主要介紹了Android啟動內(nèi)置APK和動態(tài)發(fā)送接收自定義廣播實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android 開發(fā)音頻組件(Vitamio FAQ)詳細(xì)介紹
本文主要介紹Android開發(fā)音頻播放器,Vitamio是Android播放器組件,支持幾乎所有視頻格式和網(wǎng)絡(luò)視頻流,希望能幫助開發(fā)Android 音頻播放的小伙伴2016-07-07
Android中ActionBar以及menu的代碼設(shè)置樣式
這篇文章主要介紹了Android中ActionBar以及menu的代碼設(shè)置樣式的相關(guān)資料,需要的朋友可以參考下2015-07-07
NestedScrollView+Recyclerview下滑卡頓解決方法
本文為大家解決安卓開發(fā)時候NestedScrollView+Recyclerview下滑卡頓的問題,希望能夠幫助到你。2017-11-11
Android 自定義View實(shí)現(xiàn)計時文字詳解
這篇文章主要為大家介紹了Android 自定義View實(shí)現(xiàn)計時文字詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

