您的位置:首页 > 移动开发 > Android开发

Android中的定时器AlarmManager简介

2014-07-21 14:20 127 查看
AlarmManager不仅可用于开发闹钟应用,还可以作为一个全局定时器使用,Android应用的程序中也是通过Context的getSystemService()方法来获取AlarmManager对象,一旦程序获取了AlarmManager对象之后,就可以调用它的如下方法来设置定时启动的组件。

set(int type, long triggerAtTime,PendingIntent operation);

设置triggerAtTime时间启动由operation参数指定的组件。其中第一个参数指定定时服务的类型,该参数不可接受如下值:--------------------------------

ELAPSED_REALTIME:指定从现在开始时间过了一定时间(相对于系统启动开始)后启动operation所对应的组件。状态值为:3。

ELAPSED_REALTIME_WAKEUP:指定从现在开始时间(也使用相对时间)过了一定时候后启动operation所对应的组件。即使系统挂机也会执行operation所对应的组件。状态值为:1。

TRC:指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件。状态值为1。

RTC_WAKEUP:指定当系统调用System.currentTimeMillis()方法返回值与triggerAtTime相等时启动operation所对应的组件。即使系统关机也会执行operation所对应的组件。状态值为0。

----------------------------------------------------第二个参数表示闹钟执行时间,第三个参数表示闹钟响应动作。

setInexactRepeating(int type, longtriggerAtTime, long interval, PendingIntent operation):设置一个非精确的周期性任务。例如我们设置Alarm每个小时启动一次,但系统并不一定总在每小时的开始启动Alarm服务。第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。

setRepeating(int type, long triggerArTime,long interval, PendingIntent operation);设置一个周期性执行的定时服务。与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。

cancel(PendingIntent operation):取消AlarmManager的定时服务。

设置闹钟:

public class AlarmTest extends Activity {
	Button setTime;
	AlarmManager aManager;
	Calendar currentTime = Calendar.getInstance();
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 获取程序界面的按钮
		setTime = (Button) findViewById(R.id.setTime);
		// 获取AlarmManager对象
		aManager = (AlarmManager) getSystemService(Service.ALARM_SERVICE);
		// 为“设置闹铃”按钮绑定监听器。
		setTime.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View source) {
				Calendar currentTime = Calendar.getInstance();
				// 创建一个TimePickerDialog实例,并把它显示出来。
				new TimePickerDialog(AlarmTest.this, 0, // 绑定监听器
						new TimePickerDialog.OnTimeSetListener() {
							@Override
							public void onTimeSet(TimePicker tp, int hourOfDay,
									int minute) {
								// 指定启动AlarmActivity组件
								Intent intent = new Intent(AlarmTest.this,
										AlarmActivity.class);
								// 创建PendingIntent对象
								PendingIntent pi = PendingIntent.getActivity(
										AlarmTest.this, 0, intent, 0);
								Calendar c = Calendar.getInstance();
								// 根据用户选择时间来设置Calendar对象
								c.set(Calendar.HOUR, hourOfDay);
								c.set(Calendar.MINUTE, minute);
								// 设置AlarmManager将在Calendar对应的时间启动指定组件
								aManager.set(AlarmManager.RTC_WAKEUP,
										c.getTimeInMillis(), pi);
								// 显示闹铃设置成功的提示信息
								Toast.makeText(AlarmTest.this, "闹铃设置成功啦",
										Toast.LENGTH_SHORT).show();
							}
						}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime
								.get(Calendar.MINUTE), false).show();
			}
		});
	}
}


闹钟的提醒:

public class AlarmActivity extends Activity {
	MediaPlayer alarmMusic;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 加载指定音乐,并为之创建MediaPlayer对象
		alarmMusic = MediaPlayer.create(this, R.raw.alarm);
		alarmMusic.setLooping(true);
		// 播放音乐
		alarmMusic.start();
		// 创建一个对话框
		new AlertDialog.Builder(AlarmActivity.this).setTitle("闹钟")
				.setMessage("闹钟响了,Go!Go!Go!")
				.setPositiveButton("确定", new OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// 停止音乐
						alarmMusic.stop();
						// 结束该Activity
						AlarmActivity.this.finish();
					}
				}).show();
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: