亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

AlarmManager實現鬧鐘功能

系統 1962 0

一:AlarmManager簡介

1、AlarmManager,顧名思義,就是“提醒”,是Android中常用的一種系統級別的提示服務,可以實現從指定時間開始,以一個固定的間隔時間執行某項操作,所以常常與廣播(Broadcast)連用,實現鬧鐘等提示功能

2、AlarmManager的常用方法有三個:

(1)set(int type,long startTime,PendingIntent pi);

該方法用于設置一次性鬧鐘,第一個參數表示鬧鐘類型,第二個參數表示鬧鐘執行時間,第三個參數表示鬧鐘響應動作。

(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

該方法用于設置重復鬧鐘,第一個參數表示鬧鐘類型,第二個參數表示鬧鐘首次執行時間,第三個參數表示鬧鐘兩次執行的間隔時間,第三個參數表示鬧鐘響應動作。

(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);

該方法也用于設置重復鬧鐘,與第二個方法相似,不過其兩個鬧鐘執行的間隔時間不是固定的而已。

3、三個方法各個參數詳悉:

(1)int type:鬧鐘的類型,常用的有5個值:AlarmManager.ELAPSED_REALTIME、AlarmManager.ELAPSED_REALTIME_WAKEUP、AlarmManager.RTC、AlarmManager.RTC_WAKEUP、AlarmManager.POWER_OFF_WAKEUP。

AlarmManager.ELAPSED_REALTIME表示鬧鐘在手機睡眠狀態下不可用,該狀態下鬧鐘使用相對時間(相對于系統啟動開始),狀態值為3;

AlarmManager.ELAPSED_REALTIME_WAKEUP表示鬧鐘在睡眠狀態下會喚醒系統并執行提示功能,該狀態下鬧鐘也使用相對時間,狀態值為2;

AlarmManager.RTC表示鬧鐘在睡眠狀態下不可用,該狀態下鬧鐘使用絕對時間,即當前系統時間,狀態值為1;

AlarmManager.RTC_WAKEUP表示鬧鐘在睡眠狀態下會喚醒系統并執行提示功能,該狀態下鬧鐘使用絕對時間,狀態值為0;

AlarmManager.POWER_OFF_WAKEUP表示鬧鐘在手機關機狀態下也能正常進行提示功能,所以是5個狀態中用的最多的狀態之一,該狀態下鬧鐘也是用絕對時間,狀態值為4;不過本狀態好像受SDK版本影響,某些版本并不支持;

(2)long startTime:鬧鐘的第一次執行時間,以毫秒為單位,可以自定義時間,不過一般使用當前時間。需要注意的是,本屬性與第一個屬性(type)密切相關,如果第一個參數對應的鬧鐘使用的是相對時間(ELAPSED_REALTIME和ELAPSED_REALTIME_WAKEUP),那么本屬性就得使用相對時間(相對于系統啟動時間來說),比如當前時間就表示為:SystemClock.elapsedRealtime();如果第一個參數對應的鬧鐘使用的是絕對時間(RTC、RTC_WAKEUP、POWER_OFF_WAKEUP),那么本屬性就得使用絕對時間,比如當前時間就表示為:System.currentTimeMillis()。

(3)long intervalTime:對于后兩個方法來說,存在本屬性,表示兩次鬧鐘執行的間隔時間,也是以毫秒為單位。

(4)PendingIntent pi:是鬧鐘的執行動作,比如發送一個廣播、給出提示等等。PendingIntent是Intent的封裝類。需要注意的是,如果是通過啟動服務來實現鬧鐘提示的話,PendingIntent對象的獲取就應該采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通過廣播來實現鬧鐘提示的話,PendingIntent對象的獲取就應該采用PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式來實現鬧鐘提示的話,PendingIntent對象的獲取就應該采用PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果這三種方法錯用了的話,雖然不會報錯,但是看不到鬧鐘提示效果。

4、?AlarmManager使用示例:利用用戶自定義廣播實現鬧鐘功能,從當前時間開始,每隔10分鐘提示一次

(1)實現原理:在SendActivity.java中定義一個AlarmManager對象,指定該對象從當前時間開始,每隔10分鐘向名為“MYALARMRECEIVER”的廣播接收器發出一條廣播,附加消息內容為“你該打醬油了”;創建一個名為MyReceiver的廣播接收器,在其onReceive方法中獲取Intent對象傳過來的值(“你該打醬油了”)并用一個Toast組件顯示出來;在AndroidManifest.xml文件中注冊SendActivity類和廣播接收器類MyReceiver,設置MyReceiver的action的值為“MYALARMRECEIVER”

注:以上段落來自于? http://blog.csdn.net/jeethongfei/article/details/6767826

?

二:代碼實現

1.創建廣播接收器

?

      
        import
      
      
         android.content.BroadcastReceiver;


      
      
        import
      
      
         android.content.Context;


      
      
        import
      
      
         android.content.Intent;


      
      
        import
      
      
         android.widget.Toast;




      
      
        public
      
      
        class
      
       MyReceiver 
      
        extends
      
      
         BroadcastReceiver{



    @Override

    
      
      
        public
      
      
        void
      
      
         onReceive(Context context, Intent intent) {

        
      
      
        if
      
      (intent != 
      
        null
      
      
        ){

            
      
      
        //
      
      
        接收到廣播后,執行響鈴操作
      
      
                    

            String info 
      
      = intent.getStringExtra("tmac"
      
        );

            Toast.makeText(context, 
      
      "廣播接收成功"+":"+info, 1
      
        ).show();

        }

    }

    

}
      
    

2.注冊廣播接收器

       

<!-- 在Application標簽內添加receiver標簽-->



<receiver android:name="com.jms.testdemo.MyReceiver">

            <intent-filter >

                <action android:name="itsdon"/>

            </intent-filter>
      
</receiver>

3.功能代碼

        
            1
        
        
          import
        
        
           java.util.Calendar;


        
        
            2
        
        
          import
        
        
           java.util.TimeZone;


        
        
            3
        
        
          import
        
        
           android.app.Activity;


        
        
            4
        
        
          import
        
        
           android.app.AlarmManager;


        
        
            5
        
        
          import
        
        
           android.app.PendingIntent;


        
        
            6
        
        
          import
        
        
           android.content.Context;


        
        
            7
        
        
          import
        
        
           android.content.Intent;


        
        
            8
        
        
          import
        
        
           android.os.Bundle;


        
        
            9
        
        
          import
        
        
           android.os.SystemClock;


        
        
           10
        
        
          import
        
        
           android.view.View;


        
        
           11
        
        
          import
        
        
           android.view.View.OnClickListener;


        
        
           12
        
        
          import
        
        
           android.widget.Button;


        
        
           13
        
        
          import
        
        
           android.widget.TimePicker;


        
        
           14
        
        
          import
        
        
           android.widget.TimePicker.OnTimeChangedListener;


        
        
           15
        
        
          import
        
        
           android.widget.Toast;


        
        
           16
        
        
           17
        
        
          public
        
        
          class
        
         MainActivity 
        
          extends
        
        
           Activity {


        
        
           18
        
        
           19
        
        
          public
        
        
          static
        
        
          final
        
         String TAG = "HomeActivity"
        
          ;


        
        
           20
        
        
          private
        
        
           TimePicker timePicker;


        
        
           21
        
        
          private
        
        
           Button setAlarm_btn;


        
        
           22
        
        
          private
        
        
           Button cancel_btn;


        
        
           23
        
        
          private
        
        
          int
        
         mHour = -1;  
        
          //
        
        
          timePicker顯示的小時
        
        
           24
        
        
          private
        
        
          int
        
         mMinute = -1; 
        
          //
        
        
          timePicker顯示的分鐘
        
        
           25
        
        
          private
        
        
           AlarmManager aManager;


        
        
           26
        
        
          private
        
        
           PendingIntent pIntent;


        
        
           27
        
        
           28
        
        
              @Override


        
        
           29
        
        
          protected
        
        
          void
        
        
           onCreate(Bundle savedInstanceState) {


        
        
           30
        
        
          super
        
        
          .onCreate(savedInstanceState);


        
        
           31
        
        
                  setContentView(R.layout.activity_main);


        
        
           32
        
        
                  initView();


        
        
           33
        
        
              }


        
        
           34
        
        
           35
        
        
          public
        
        
          void
        
        
           initView(){


        
        
           36
        
        
           37
        
                 Calendar calendar =
        
           Calendar.getInstance();


        
        
           38
        
        
          //
        
        
          設置當前位置的時區
        
        
           39
        
                 calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"
        
          ));


        
        
           40
        
        
          if
        
        (mHour == -1 && mMinute == -1
        
          ){


        
        
           41
        
                     mHour =
        
           calendar.get(Calendar.HOUR_OF_DAY);


        
        
           42
        
                     mMinute =
        
           calendar.get(Calendar.MINUTE);


        
        
           43
        
        
                  }


        
        
           44
        
        
           45
        
                 timePicker =
        
           (TimePicker) findViewById(R.id.timepicker);


        
        
           46
        
        
                  timePicker.setCurrentHour(mHour);


        
        
           47
        
        
                  timePicker.setCurrentMinute(mMinute);


        
        
           48
        
                 timePicker.setOnTimeChangedListener(
        
          new
        
        
           OnTimeChangedListener() {


        
        
           49
        
        
           50
        
        
                      @Override


        
        
           51
        
        
          public
        
        
          void
        
         onTimeChanged(TimePicker tPicker, 
        
          int
        
         hour, 
        
          int
        
        
           minute) {


        
        
           52
        
                         mHour =
        
           hour;


        
        
           53
        
                         mMinute =
        
           minute;


        
        
           54
        
        
                      }


        
        
           55
        
        
                  });


        
        
           56
        
        
           57
        
                 setAlarm_btn =
        
           (Button) findViewById(R.id.setAlarm);


        
        
           58
        
                 aManager =
        
           (AlarmManager) getSystemService(Context.ALARM_SERVICE);


        
        
           59
        
                 Intent intent = 
        
          new
        
        
           Intent();


        
        
           60
        
                 intent.setAction("itsdon"
        
          );


        
        
           61
        
                 intent.putExtra("tmac", "tracy mcgrady"
        
          );


        
        
           62
        
                  pIntent = PendingIntent.getBroadcast(getApplicationContext(),0, intent, 0
        
          );


        
        
           63
        
        
           64
        
                 setAlarm_btn.setOnClickListener(
        
          new
        
        
           OnClickListener() {


        
        
           65
        
        
           66
        
        
                      @Override


        
        
           67
        
        
          public
        
        
          void
        
        
           onClick(View arg0) {


        
        
           68
        
                         Calendar calendar =
        
           Calendar.getInstance();


        
        
           69
        
        
                          calendar.setTimeInMillis(System.currentTimeMillis());


        
        
           70
        
                         calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"
        
          ));


        
        
           71
        
        
                          calendar.set(Calendar.MINUTE, mMinute);


        
        
           72
        
        
                          calendar.set(Calendar.HOUR_OF_DAY, mHour);


        
        
           73
        
                         calendar.set(Calendar.SECOND,0
        
          );


        
        
           74
        
                         calendar.set(Calendar.MILLISECOND,0
        
          );


        
        
           75
        
        
           76
        
        
          //
        
        
          選擇的每天的定時的時間
        
        
           77
        
        
          long
        
         selectTime =
        
           calendar.getTimeInMillis();


        
        
           78
        
        
          //
        
        
          當前的時間
        
        
           79
        
        
          long
        
         currentTime =
        
           System.currentTimeMillis();


        
        
           80
        
        
          //
        
        
           開機之后到現在的運行時間(包括睡眠時間)
        
        
           81
        
        
          long
        
         firstTime  =
        
           SystemClock.elapsedRealtime();


        
        
           82
        
        
           83
        
        
          //
        
        
          如果當前時間大于選擇的鬧鈴時間,那么從鬧鈴時間變為第二天的設定時間
        
        
           84
        
        
          if
        
        (currentTime >
        
           selectTime){


        
        
           85
        
                             Toast.makeText(getApplicationContext(), "當前時間大于設置的鬧鈴時間"
        
          ,Toast.LENGTH_LONG).show();


        
        
           86
        
                              calendar.add(Calendar.DAY_OF_MONTH, 1
        
          );


        
        
           87
        
                              selectTime =
        
           calendar.getTimeInMillis();


        
        
           88
        
        
                          }


        
        
           89
        
        
           90
        
        
          //
        
        
          計算當前時間到設定時間的時間差
        
        
           91
        
        
          long
        
         time = selectTime -
        
           currentTime;


        
        
           92
        
                         firstTime +=
        
           time;


        
        
           93
        
                         aManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime, 10*1000
        
          , pIntent);


        
        
           94
        
        
           95
        
                         Toast.makeText(getApplicationContext(), "鬧鐘設置成功",1
        
          ).show();


        
        
           96
        
        
                      }


        
        
           97
        
        
                  });


        
        
           98
        
        
           99
        
                 cancel_btn =
        
           (Button) findViewById(R.id.cancel);


        
        
          100
        
                 cancel_btn.setOnClickListener(
        
          new
        
        
           OnClickListener() {


        
        
          101
        
        
          102
        
        
                      @Override


        
        
          103
        
        
          public
        
        
          void
        
        
           onClick(View arg0) {


        
        
          104
        
        
                          aManager.cancel(pIntent);


        
        
          105
        
        
                      }


        
        
          106
        
        
                  });


        
        
          107
        
        
              }


        
        
          108
        
         }
      
View Code

4.效果圖

AlarmManager實現鬧鐘功能

5.說明

?設置鬧鈴成功后,即使退出應用程序,仍然會發送廣播和處理廣播,除非“關閉鬧鈴"。詳情見代碼;

6.額外

package ?com.jsm.student;

public class Student{

}

Student s = new Student();

s.getClass().getName(); ? ==?com.jms.student.Student

s.getClass().getSimpleName(); == ?Student

AlarmManager實現鬧鐘功能


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区免费在线视频 | 一级欧美毛片成人免费视频 | 888奇米影视| 久久精品久噜噜噜久久 | 深夜男人影院 | 婷婷综合激情 | 韩毛片| 亚洲人和日本人jzz护士 | 亚洲欧洲精品成人久久曰 | 九九精品免视看国产成人 | 国产亚洲精品sese在线播放 | 久草久热| 色综合h | 羞羞网站在线播放 | 日本一区二区三区不卡在线视频 | 久久99精品久久久66 | 亚洲一区二区欧美日韩 | 视频日韩| 99九九成人免费视频精品 | 亚洲欧美综合网 | 久久99国产精品久久99无号码 | 日韩欧美亚洲一区精选 | a级亚洲片精品久久久久久久 | 色综合天天综久久久噜噜噜久久〔 | 色综合久久一本首久久 | 日本高清视频不卡 | 一级毛片免费观看久 | 免费看色片网站 | 国产一区二区三区在线免费 | 99国产精品免费视频观看 | 日本精品久久久久中文字幕8 | 国产成人精品一区二三区2022 | 狠狠插天天干 | 成人91在线| 久久综合99re88久久爱 | 亚洲热在线观看 | 久久国产精品久久久久久 | 亚洲第成色999久久网站 | 成人 在线欧美亚洲 | 精品欧美一区手机在线观看 | 97国产精品视频观看一 |