android之定時器AlarmManager .
果圖:
當我們點擊定時時,會彈出一個時間選擇器,選定好時間之後,係統便可以進行定時了。注意,這裏可不是會真的響鈴,我們在定時的任務裏並沒有添加響鈴的代碼,隻是在Logcat中做了個簡單的打印。本例子重點在於講解在android中AlarmManager的使用。
activity的代碼:
- package cn.com.chenzheng_java;
- import java.util.Calendar;
- import android.app.Activity;
- import android.app.AlarmManager;
- import android.app.PendingIntent;
- import android.app.TimePickerDialog;
- import android.app.TimePickerDialog.OnTimeSetListener;
- import android.content.Intent;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.CheckBox;
- import android.widget.CompoundButton;
- import android.widget.TimePicker;
- import android.widget.CompoundButton.OnCheckedChangeListener;
- public class AlarmManagerActivity extends Activity implements OnClickListener,OnTimeSetListener,OnCheckedChangeListener{
- Calendar calendar = Calendar.getInstance();// 代表當前時間的日曆
- Button button1 ;
- CheckBox checkBox;
- boolean flag = false ;// 是否隻執行一次
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.alarm);
- button1 = (Button) findViewById(R.id.button_alarm1);
- checkBox = (CheckBox) findViewById(R.id.checkBox1_alarm);
- checkBox.setOnCheckedChangeListener(this);
- button1.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- if(v==button1){
- calendar.setTimeInMillis(System.currentTimeMillis());
- new TimePickerDialog(AlarmManagerActivity.this, this,
- calendar.get(Calendar.HOUR_OF_DAY),
- calendar.get(Calendar.MINUTE), true).show();
- }
- }
- /**
- * 當我們設置了新時間時觸發。
- */
- @Override
- public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
- // 將時間設置為定時的時間
- calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
- calendar.set(Calendar.MINUTE, minute);
- Intent intent = new Intent(AlarmManagerActivity.this,MyAlarmBroadCast.class);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
- /***
- * 獲取全局定時器的服務管理器
- */
- AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
- if(flag){
- /**
- * 指定的任務隻會執行一次,如果該pendingIntent指定的任務已經被執行過了,那麼該方法直接會被cancel掉。
- * set(int type, long triggerAtTime, PendingIntent operation)
- * type 指定定時模式。
- * triggerAtTime 觸發任務的時間。該參數和定時模式息息相關
- * operation 該參數指定一個廣播Intent,當時間到了時,係統會廣播裏麵的intent,觸發相應的廣播接收者執行某些操作,比如響鈴……
- */
- alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
- }
- else
- {
- /**
- * 通過該方法指定的任務會一直間隔執行,第三個參數就指定了執行的時間間隔
- * 如果我們想取消的話,請使用:alarmManager.cancel(pendingIntent);
- * 注意,這裏的pendingIntent要和setRepeating方法中的一致哦。
- */
- alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 5*1000, pendingIntent);
- }
- Log.i("通知", "定時成功!");
- }
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- flag = !isChecked;
- }
- }
alarm.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
- android:layout_width="match_parent" android:layout_height="match_parent"
- android:orientation="vertical">
- <AnalogClock android:id="@+id/analogClock1_alarm"
- android:layout_width="wrap_content" android:layout_height="wrap_content"></AnalogClock>
- <CheckBox android:text="是否重複響鈴" android:id="@+id/checkBox1_alarm" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
- <Button android:text="定時" android:id="@+id/button_alarm1"
- android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
- </LinearLayout>
MyAlarmBroadCast.java
- package cn.com.chenzheng_java;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.util.Log;
- import android.widget.Toast;
- /**
- * 聲明接受AlarmManager時間到了時發布的廣播
- * @author chenzheng_java
- */
- public class MyAlarmBroadCast extends BroadcastReceiver{
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.i("通知", "收到了廣播");
- // 可以在此處添加響鈴的代碼
- }
- }
Manifest.xml代碼:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="https://schemas.android.com/apk/res/android"
- package="cn.com.chenzheng_java"
- android:versionCode="1"
- android:versionName="1.0">
- <uses-sdk android:minSdkVersion="8" />
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name="AlarmManagerActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name="MyAlarmBroadCast"/>
- </application>
- </manifest>
------------------------------------------------------------------
AlarmManager的使用機製有的稱唿為全局定時器,有的稱唿為鬧鍾。通過對它的使用,個人覺得叫全局定時器比較合適,其實它的作用和Timer有點相似。都有兩種相似的用法:(1)在指定時長後執行某項操作(2)周期性的執行某項操作
使用的步驟:
第一:獲取管理器。AlarmManager alarmManager = this.getSystemService(ALARM_SERVICE);
第二:通過AlarmManager的set和setRepeating方法定時。可以通過cancel()方法取消定時。
在set和setRepeating方法中,第一個參數type代表定時模式,這裏的定時模式主要有以下幾種。
最後更新:2017-04-02 06:51:55
上一篇:
IE(微軟)瀏覽器擴展開發初探
下一篇:
關於android輸入框被鍵盤遮擋的問題
System.Xml.XmlException: 給定編碼中的字符無效。 第 XX 行,位置 YY。
Vim技能修煉教程(6) - 行編輯器
如何解決jQuery Validation針對動態添加的表單無法工作的問題?
《HttpClient官方文檔》2.3 HTTP連接管理
如何安裝,卸載eclipse中的ADT,或者更新ADT
java 在線編輯模版 代碼編輯器 兼容手機平板PC freemaker 靜態引擎 網站源碼
ASP.NET MVC中的ActionFilter是如何執行的?
知途教育:校企融合人才培養解決方案助力大數據與雲計算人才成長
純js書寫ajax
rman備份與腳本