本文主要是介绍Android中的定时器AlarmManager简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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();@Overridepublic 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() {@Overridepublic void onClick(View source) {Calendar currentTime = Calendar.getInstance();// 创建一个TimePickerDialog实例,并把它显示出来。new TimePickerDialog(AlarmTest.this, 0, // 绑定监听器new TimePickerDialog.OnTimeSetListener() {@Overridepublic 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;@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 停止音乐alarmMusic.stop();// 结束该ActivityAlarmActivity.this.finish();}}).show();}
}
这篇关于Android中的定时器AlarmManager简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!