一個(gè)簡(jiǎn)單的Android定時(shí)任務(wù)
使用AlarmManager來(lái)實(shí)現(xiàn)定時(shí)提醒,它提供了一種訪問(wèn)系統(tǒng)鬧鐘服務(wù)的方式。在全局中,達(dá)到設(shè)定的時(shí)間,
在它上面注冊(cè)的一個(gè)Intent將會(huì)被廣播,接著啟動(dòng)相應(yīng)的應(yīng)用程序,可以通過(guò)自定義Receiver來(lái)實(shí)現(xiàn)。
首先要在AndroidManifest.xml中進(jìn)行注冊(cè)
<receiver android:name=".AlarmReceiver"> <intent-filter> <action android:name="CLOCK" /> </intent-filter> </receiver>
自定義一個(gè)鬧鐘接收器,getIntExtra可用于接受發(fā)送方putExtra傳過(guò)來(lái)的值,Intent i = new Intent(“CLOCK”)其中的“CLOCK”是注冊(cè)時(shí)使用的seceiver的name。
public class AlarmReceiver extends BroadcastReceiver { private int _id; private String str; @Override public void onReceive(Context context, Intent intent) { _id = intent.getIntExtra("ID", -1); Intent i = new Intent("CLOCK"); i.setClass(context, NoteEditor.class); i.putExtra("ID", _id); String str = intent.getStringExtra("NOTE"); Toast.makeText( context, str, Toast.LENGTH_SHORT).show(); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
時(shí)間的獲取通過(guò)DatePickerDialog和TimePickerDialog,需要注意的是DatePickerDialog的月份是從0開(kāi)始。將獲取的數(shù)據(jù)放在Calendar類中,其中月份的存儲(chǔ)也是從0開(kāi)始。
final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.set(mYear, mMonth-1, mDay, mHour, mMinute,0); Intent i = new Intent("CLOCK"); i.setClass(this, AlarmReceiver.class); i.putExtra("ID", _id); String note="notes"; i.putExtra("NOTE",note);
設(shè)置一個(gè)PendingIntent對(duì)象作為鬧鐘響應(yīng)的對(duì)象,發(fā)送廣播。第二個(gè)參數(shù)可以為0,但是因?yàn)樽龅氖且淮涡缘聂[鐘,如果為0的話,新設(shè)的鬧鐘會(huì)將之前設(shè)的鬧鐘覆蓋掉。FLAG_UPDATE_CURRENT: 如果希望獲取的PendingIntent對(duì)象與已經(jīng)存在的PendingIntent對(duì)象相比,如果只是Intent附加的數(shù)據(jù)不同, 那么當(dāng)前存在的PendingIntent對(duì)象不會(huì)被取消,而是重新加載新的Intent附加的數(shù)據(jù)。
PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);
發(fā)送鬧鐘請(qǐng)求,設(shè)置在alarmCalendar.getTimeInMillis()時(shí)間啟動(dòng)由pi指定的組件。
第一個(gè)參數(shù)用來(lái)指定定時(shí)服務(wù)的類型,主要可選以下值:
AlarmManager.ELAPSED_REALTIME:睡眠狀態(tài)下不可用,該狀態(tài)下鬧鐘使用相對(duì)時(shí)間。
AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠狀態(tài)下會(huì)喚醒系統(tǒng)并執(zhí)行提示功能,也使用相對(duì)時(shí)間。
AlarmManager.RTC:該狀態(tài)睡眠狀態(tài)下不可用,使用絕對(duì)時(shí)間,即當(dāng)前系統(tǒng)時(shí)間。
AlarmManager.RTC_WAKEUP:鬧鐘在睡眠狀態(tài)下會(huì)喚醒系統(tǒng)并執(zhí)行提示功能,該狀態(tài)下鬧鐘也使用絕對(duì)時(shí)間。
am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android實(shí)現(xiàn)http中請(qǐng)求訪問(wèn)添加cookie的方法
這篇文章主要介紹了android實(shí)現(xiàn)http中請(qǐng)求訪問(wèn)添加cookie的方法,實(shí)例分析了兩種添加cookie的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10Android實(shí)現(xiàn)水平帶刻度的進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)水平帶刻度的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Android使用RecyclerView實(shí)現(xiàn)自定義列表、點(diǎn)擊事件以及下拉刷新
這篇文章主要介紹了Android使用RecyclerView實(shí)現(xiàn)自定義列表、點(diǎn)擊事件以及下拉刷新的相關(guān)資料,需要的朋友可以參考下2016-04-04Android實(shí)現(xiàn)熱門(mén)標(biāo)簽的流式布局
這篇文章主要介紹了Android實(shí)現(xiàn)熱門(mén)標(biāo)簽的流式布局的詳細(xì)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12Android studio 下JNI編程實(shí)例并生成so庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android studio 下JNI編程實(shí)例并生成so庫(kù),需要的朋友可以參考下2017-09-09使用Android原生WebView+Highcharts實(shí)現(xiàn)可左右滑動(dòng)的折線圖
折線圖是Android開(kāi)發(fā)中經(jīng)常會(huì)碰到的效果,但由于涉及自定義View的知識(shí),對(duì)許多剛?cè)腴T(mén)的小白來(lái)說(shuō)會(huì)覺(jué)得很高深,下面這篇文章主要給大家介紹了關(guān)于如何使用Android原生WebView+Highcharts實(shí)現(xiàn)可左右滑動(dòng)的折線圖的相關(guān)資料,需要的朋友可以參考下2022-05-05Android Jetpack組件支持庫(kù)DataBinding與ViewModel與LiveData及Room
Jetpack是一個(gè)由多個(gè)技術(shù)庫(kù)組成的套件,可幫助開(kāi)發(fā)者遵循最佳做法,減少樣板代碼并編寫(xiě)可在各種Android版本和設(shè)備中一致運(yùn)行的代碼,讓開(kāi)發(fā)者精力集中編寫(xiě)重要的代碼2022-09-09