android之定时器AlarmManager
2012-11-15 22:24
393 查看
终效果图:
当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在Logcat中做了个简单的打印。本例子重点在于讲解在android中AlarmManager的使用。
activity的代码:
[java:nogutter]
view plaincopyprint?
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;
}
}
MyAlarmBroadCast.java
[java:nogutter]
view plaincopyprint?
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("通知",
"收到了广播");
// 可以在此处添加响铃的代码
}
}
------------------------------------------------------------------
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作
使用的步骤:
第一:获取管理器。AlarmManager alarmManager = this.getSystemService(ALARM_SERVICE);
第二:通过AlarmManager的set和setRepeating方法定时。可以通过cancel()方法取消定时。
在set和setRepeating方法中,第一个参数type代表定时模式,这里的定时模式主要有以下几种。
当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在Logcat中做了个简单的打印。本例子重点在于讲解在android中AlarmManager的使用。
activity的代码:
[java:nogutter]
view plaincopyprint?
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;
}
}
[xhtml:nogutter] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://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> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://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
[java:nogutter]
view plaincopyprint?
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("通知",
"收到了广播");
// 可以在此处添加响铃的代码
}
}
[xhtml:nogutter] view plaincopyprint? <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://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> <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://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代表定时模式,这里的定时模式主要有以下几种。
相关文章推荐
- android之定时器AlarmManager用法详解
- Android定时器AlarmManager(定时发送广播)
- android全局定时器AlarmManager
- Android笔记系列--定时器AlarmManager
- android的全局定时器AlarmManager详解
- Android中的定时器AlarmManager
- android的全局定时器AlarmManager详解
- Android 定时器AlarmManager
- android之定时器AlarmManager
- Android中的定时器AlarmManager简介
- Android中的定时器AlarmManager
- android之定时器AlarmManager
- Android 定时器AlarmManager生命周期
- Android中的定时器AlarmManager
- Android开发笔记(五十)定时器AlarmManager
- Android中的定时器AlarmManager
- Android中的定时器AlarmManager
- Android中的定时器AlarmManager
- android之定时器AlarmManager
- Android中的定时器AlarmManager