編輯:關於Android編程
使用AlarmManager來實現定時提醒,它提供了一種訪問系統鬧鐘服務的方式。在全局中,達到設定的時間,
在它上面注冊的一個Intent將會被廣播,接著啟動相應的應用程序,可以通過自定義Receiver來實現。
首先要在AndroidManifest.xml中進行注冊
<receiver android:name=".AlarmReceiver"> <intent-filter> <action android:name="CLOCK" /> </intent-filter> </receiver>
自定義一個鬧鐘接收器,getIntExtra可用於接受發送方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開始。將獲取的數據放在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);
設置一個PendingIntent對象作為鬧鐘響應的對象,發送廣播。第二個參數可以為0,但是因為做的是一次性的鬧鐘,如果為0的話,新設的鬧鐘會將之前設的鬧鐘覆蓋掉。FLAG_UPDATE_CURRENT: 如果希望獲取的PendingIntent對象與已經存在的PendingIntent對象相比,如果只是Intent附加的數據不同, 那麼當前存在的PendingIntent對象不會被取消,而是重新加載新的Intent附加的數據。
PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);
發送鬧鐘請求,設置在alarmCalendar.getTimeInMillis()時間啟動由pi指定的組件。
第一個參數用來指定定時服務的類型,主要可選以下值:
AlarmManager.ELAPSED_REALTIME:睡眠狀態下不可用,該狀態下鬧鐘使用相對時間。
AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠狀態下會喚醒系統並執行提示功能,也使用相對時間。
AlarmManager.RTC:該狀態睡眠狀態下不可用,使用絕對時間,即當前系統時間。
AlarmManager.RTC_WAKEUP:鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘也使用絕對時間。
am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
一丶效果演示 二丶實現功能介紹及思路設計前幾篇的博客被指出:純貼代碼沒什麼用,解釋下,本博客是由視頻轉博客的筆記及自己加深的一些功能,覺得提供代碼是最有效的,雖然如此還是
之前講到過,應用開發者為了保護自己的應用不被別人分析和篡改,會將應用的安全性寄托在某個(些)機制上。可以被用來保護應用的機制有很多,效果和實現難度也是各有特點。有這樣一類
先上效果圖:這個效果一開始我是想直接讓UI給個切圖,後來發現這樣不行,適配很差,達不到效果。所以就自己動手寫代碼,其實思路也很簡單:在這個布局的父布局上面再手動添加一個v
首先引申下AIDL,什麼是AIDL呢?IPC? ------ Designing a Remote Interface Using AIDL 通常情況下,我們在同一進程內