Android AlarmManager簡單例子

來源:互聯網
上載者:User

AlarmManager 包含的主要方法:

[java] 
// 取消已經註冊的與參數匹配的定時器    
void   cancel(PendingIntent operation)   
//註冊一個新的延遲定時器 
void   set(int type, long triggerAtTime, PendingIntent operation)   
//註冊一個重複類型的定時器 
void   setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)   
//註冊一個非精密的重複類型定時器 
void setInexactRepeating (int type, long triggerAtTime, long interval, PendingIntent operation) 
//設定時區   
void   setTimeZone(String timeZone)  

定時器主要類型:
[java] 
public   static   final   int  ELAPSED_REALTIME   
// 當系統進入睡眠狀態時,這種類型的鬧鈴不會喚醒系統。直到系統下次被喚醒才傳遞它,該鬧鈴所用的時間是相對時間,是從系統啟動後開始計時的,包括睡眠時 間,可以通過調用SystemClock.elapsedRealtime()獲得。系統值是3    (0x00000003)。    
   
public   static   final   int  ELAPSED_REALTIME_WAKEUP   
//能喚醒系統,用法同ELAPSED_REALTIME,系統值是2 (0x00000002) 。    
   
public   static   final   int  RTC   
//當系統進入睡眠狀態時,這種類型的鬧鈴不會喚醒系統。直到系統下次被喚醒才傳遞它,該鬧鈴所用的時間是絕對時間,所用時間是UTC時間,可以通過調用 System.currentTimeMillis()獲得。系統值是1 (0x00000001) 。    
   
public   static   final   int  RTC_WAKEUP   
//能喚醒系統,用法同RTC類型,系統值為 0 (0x00000000) 。    
   
Public static   final   int  POWER_OFF_WAKEUP   
//能喚醒系統,它是一種關機鬧鈴,就是說裝置在關機狀態下也可以喚醒系統,所以我們把它稱之為關機鬧鈴。使用方法同RTC類型,系統值為4(0x00000004)。    

下面我們建立一個最簡單的alarm程式。 開機啟動一個broadcast,然後驅動一個alarm讓它每隔1秒鐘啟動一次。
public class test_chargeReceive extends BroadcastReceiver {
 private static AlarmManager mAlarmManager=null;
    private static PendingIntent mIdleIntent;
    private static final int IDLE_REQUEST = 0;  
    static long now=0;
    static  AlertDialog dialog=null ;
@Override
public void onReceive(Context context, Intent intent) {
    if(mAlarmManager==null){  
  mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent idleIntent = new Intent("com.keenhi.charge", null);
    mIdleIntent = PendingIntent.getBroadcast(context, IDLE_REQUEST, idleIntent, 0);
   // mAlarmManager.cancel(mIdleIntent);
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, mIdleIntent);
    }
            String action = intent.getAction();
        if (action.equals("com.keenhi.charge")){
                mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, mIdleIntent);
               now= System.currentTimeMillis();
           Log.i("alrm   timer now="+now);
       }
              }
manifest.xml的重要代碼:
<receiver android:name="test_chargeReceive">
             <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
               <action android:name="com.keenhi.charge"/> 
            </intent-filter>
 </receiver>
上面程式的功能很簡單,一是讓它開機接收到"android.intent.action.BOOT_COMPLETED"廣播就啟動,然後建立一個alarm,每隔1秒鐘就發一次"com.keenhi.charge"。 為了簡單我們自發自收,收到後就顯示一個系統的目前的毫秒數。
上面的alarm是有一次,所以我們每次執行時再啟動一次alarm。這樣做比較通用我們想停就停,間隔時間也可以自由更改。 如果我們只需要實現一個重複的alarm,我們可以這樣做。
mAlarmManager.setInexactRepeating
(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000, mIdleIntent);
我們設定一個重複鬧鐘就可以了,以後都不再需要重複賦值。


作者:wantianpei

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.