一個簡單的Android定時任務(wù)
使用AlarmManager來實現(xiàn)定時提醒,它提供了一種訪問系統(tǒng)鬧鐘服務(wù)的方式。在全局中,達到設(shè)定的時間,
在它上面注冊的一個Intent將會被廣播,接著啟動相應(yīng)的應(yīng)用程序,可以通過自定義Receiver來實現(xiàn)。
首先要在AndroidManifest.xml中進行注冊
<receiver android:name=".AlarmReceiver">
<intent-filter>
<action android:name="CLOCK" />
</intent-filter>
</receiver>
自定義一個鬧鐘接收器,getIntExtra可用于接受發(fā)送方putExtra傳過來的值,Intent i = new Intent(“CLOCK”)其中的“CLOCK”是注冊時使用的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);
}
}
時間的獲取通過DatePickerDialog和TimePickerDialog,需要注意的是DatePickerDialog的月份是從0開始。將獲取的數(shù)據(jù)放在Calendar類中,其中月份的存儲也是從0開始。
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è)置一個PendingIntent對象作為鬧鐘響應(yīng)的對象,發(fā)送廣播。第二個參數(shù)可以為0,但是因為做的是一次性的鬧鐘,如果為0的話,新設(shè)的鬧鐘會將之前設(shè)的鬧鐘覆蓋掉。FLAG_UPDATE_CURRENT: 如果希望獲取的PendingIntent對象與已經(jīng)存在的PendingIntent對象相比,如果只是Intent附加的數(shù)據(jù)不同, 那么當(dāng)前存在的PendingIntent對象不會被取消,而是重新加載新的Intent附加的數(shù)據(jù)。
PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);
發(fā)送鬧鐘請求,設(shè)置在alarmCalendar.getTimeInMillis()時間啟動由pi指定的組件。
第一個參數(shù)用來指定定時服務(wù)的類型,主要可選以下值:
AlarmManager.ELAPSED_REALTIME:睡眠狀態(tài)下不可用,該狀態(tài)下鬧鐘使用相對時間。
AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠狀態(tài)下會喚醒系統(tǒng)并執(zhí)行提示功能,也使用相對時間。
AlarmManager.RTC:該狀態(tài)睡眠狀態(tài)下不可用,使用絕對時間,即當(dāng)前系統(tǒng)時間。
AlarmManager.RTC_WAKEUP:鬧鐘在睡眠狀態(tài)下會喚醒系統(tǒng)并執(zhí)行提示功能,該狀態(tài)下鬧鐘也使用絕對時間。
am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android中RecycleView與ViewPager沖突的解決方法及原理
這篇文章主要給大家介紹了關(guān)于Android中RecycleView與ViewPager沖突的解決方法及原理的相關(guān)資料,以及ViewPager嵌套RecycleView卡頓問題的處理方法,文中通過示例代碼介紹的非常狎昵,需要的朋友可以參考下2018-07-07
Android中使用ContentProvider管理系統(tǒng)資源的實例
這篇文章主要介紹了Android中使用ContentProvider管理系統(tǒng)資源的實例,講解了ContentProvider對系統(tǒng)中聯(lián)系人及多媒體資源的管理例子,需要的朋友可以參考下2016-04-04
Flutter開發(fā)技巧ListView去除水波紋方法示例
這篇文章主要為大家介紹了Flutter開發(fā)技巧ListView去除水波紋方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
Android Secret Code(輸入字符彈出手機信息)詳解
這篇文章主要介紹了Android Secret Code(輸入字符彈出手機信息)詳解的相關(guān)資料,需要的朋友可以參考下2016-11-11
Android開發(fā)實現(xiàn)Fragment監(jiān)聽返回鍵事件功能的方法
這篇文章主要介紹了Android開發(fā)實現(xiàn)Fragment監(jiān)聽返回鍵事件功能的方法,結(jié)合實例形式分析了Android使用Fragment監(jiān)聽并屏蔽返回鍵按鈕的實現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android?RecyclerLineChart實現(xiàn)圖表繪制教程
這篇文章主要為大家介紹了Android?RecyclerLineChart實現(xiàn)圖表繪制教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12

