黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

AlarmManager實(shí)現(xiàn)鬧鐘功能

系統(tǒng) 2359 0

一:AlarmManager簡介

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

2、AlarmManager的常用方法有三個(gè):

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

該方法用于設(shè)置一次性鬧鐘,第一個(gè)參數(shù)表示鬧鐘類型,第二個(gè)參數(shù)表示鬧鐘執(zhí)行時(shí)間,第三個(gè)參數(shù)表示鬧鐘響應(yīng)動(dòng)作。

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

該方法用于設(shè)置重復(fù)鬧鐘,第一個(gè)參數(shù)表示鬧鐘類型,第二個(gè)參數(shù)表示鬧鐘首次執(zhí)行時(shí)間,第三個(gè)參數(shù)表示鬧鐘兩次執(zhí)行的間隔時(shí)間,第三個(gè)參數(shù)表示鬧鐘響應(yīng)動(dòng)作。

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

該方法也用于設(shè)置重復(fù)鬧鐘,與第二個(gè)方法相似,不過其兩個(gè)鬧鐘執(zhí)行的間隔時(shí)間不是固定的而已。

3、三個(gè)方法各個(gè)參數(shù)詳悉:

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

AlarmManager.ELAPSED_REALTIME表示鬧鐘在手機(jī)睡眠狀態(tài)下不可用,該狀態(tài)下鬧鐘使用相對時(shí)間(相對于系統(tǒng)啟動(dòng)開始),狀態(tài)值為3;

AlarmManager.ELAPSED_REALTIME_WAKEUP表示鬧鐘在睡眠狀態(tài)下會(huì)喚醒系統(tǒng)并執(zhí)行提示功能,該狀態(tài)下鬧鐘也使用相對時(shí)間,狀態(tài)值為2;

AlarmManager.RTC表示鬧鐘在睡眠狀態(tài)下不可用,該狀態(tài)下鬧鐘使用絕對時(shí)間,即當(dāng)前系統(tǒng)時(shí)間,狀態(tài)值為1;

AlarmManager.RTC_WAKEUP表示鬧鐘在睡眠狀態(tài)下會(huì)喚醒系統(tǒng)并執(zhí)行提示功能,該狀態(tài)下鬧鐘使用絕對時(shí)間,狀態(tài)值為0;

AlarmManager.POWER_OFF_WAKEUP表示鬧鐘在手機(jī)關(guān)機(jī)狀態(tài)下也能正常進(jìn)行提示功能,所以是5個(gè)狀態(tài)中用的最多的狀態(tài)之一,該狀態(tài)下鬧鐘也是用絕對時(shí)間,狀態(tài)值為4;不過本狀態(tài)好像受SDK版本影響,某些版本并不支持;

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

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

(4)PendingIntent pi:是鬧鐘的執(zhí)行動(dòng)作,比如發(fā)送一個(gè)廣播、給出提示等等。PendingIntent是Intent的封裝類。需要注意的是,如果是通過啟動(dòng)服務(wù)來實(shí)現(xiàn)鬧鐘提示的話,PendingIntent對象的獲取就應(yīng)該采用Pending.getService(Context c,int i,Intent intent,int j)方法;如果是通過廣播來實(shí)現(xiàn)鬧鐘提示的話,PendingIntent對象的獲取就應(yīng)該采用PendingIntent.getBroadcast(Context c,int i,Intent intent,int j)方法;如果是采用Activity的方式來實(shí)現(xiàn)鬧鐘提示的話,PendingIntent對象的獲取就應(yīng)該采用PendingIntent.getActivity(Context c,int i,Intent intent,int j)方法。如果這三種方法錯(cuò)用了的話,雖然不會(huì)報(bào)錯(cuò),但是看不到鬧鐘提示效果。

4、?AlarmManager使用示例:利用用戶自定義廣播實(shí)現(xiàn)鬧鐘功能,從當(dāng)前時(shí)間開始,每隔10分鐘提示一次

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

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

?

二:代碼實(shí)現(xiàn)

1.創(chuàng)建廣播接收器

?

      
        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
      
      
        ){

            
      
      
        //
      
      
        接收到廣播后,執(zhí)行響鈴操作
      
      
                    

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

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

        }

    }

    

}
      
    

2.注冊廣播接收器

       

<!-- 在Application標(biāo)簽內(nèi)添加receiver標(biāo)簽-->



<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顯示的小時(shí)
        
        
           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
        
        
          //
        
        
          設(shè)置當(dāng)前位置的時(shí)區(qū)
        
        
           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
        
        
          //
        
        
          選擇的每天的定時(shí)的時(shí)間
        
        
           77
        
        
          long
        
         selectTime =
        
           calendar.getTimeInMillis();


        
        
           78
        
        
          //
        
        
          當(dāng)前的時(shí)間
        
        
           79
        
        
          long
        
         currentTime =
        
           System.currentTimeMillis();


        
        
           80
        
        
          //
        
        
           開機(jī)之后到現(xiàn)在的運(yùn)行時(shí)間(包括睡眠時(shí)間)
        
        
           81
        
        
          long
        
         firstTime  =
        
           SystemClock.elapsedRealtime();


        
        
           82
        
        
           83
        
        
          //
        
        
          如果當(dāng)前時(shí)間大于選擇的鬧鈴時(shí)間,那么從鬧鈴時(shí)間變?yōu)榈诙斓脑O(shè)定時(shí)間
        
        
           84
        
        
          if
        
        (currentTime >
        
           selectTime){


        
        
           85
        
                             Toast.makeText(getApplicationContext(), "當(dāng)前時(shí)間大于設(shè)置的鬧鈴時(shí)間"
        
          ,Toast.LENGTH_LONG).show();


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


        
        
           87
        
                              selectTime =
        
           calendar.getTimeInMillis();


        
        
           88
        
        
                          }


        
        
           89
        
        
           90
        
        
          //
        
        
          計(jì)算當(dāng)前時(shí)間到設(shè)定時(shí)間的時(shí)間差
        
        
           91
        
        
          long
        
         time = selectTime -
        
           currentTime;


        
        
           92
        
                         firstTime +=
        
           time;


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


        
        
           94
        
        
           95
        
                         Toast.makeText(getApplicationContext(), "鬧鐘設(shè)置成功",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實(shí)現(xiàn)鬧鐘功能

5.說明

?設(shè)置鬧鈴成功后,即使退出應(yīng)用程序,仍然會(huì)發(fā)送廣播和處理廣播,除非“關(guān)閉鬧鈴"。詳情見代碼;

6.額外

package ?com.jsm.student;

public class Student{

}

Student s = new Student();

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

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

AlarmManager實(shí)現(xiàn)鬧鐘功能


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論