android之定时器AlarmManager用法详解
2011-11-20 21:18
393 查看
最终效果图:
当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在Logcat中做了个简单的打印。本例子重点在于讲解在android中AlarmManager的使用。
activity的代码:
当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在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; } }
相关文章推荐
- Android中的Selector的用法详解及实例
- Android中的Handler的机制与用法详解
- Android中Shape的用法详解
- Android之C面试题③高效加载大图多图解决方案,有效避免程序OOM(LruCache用法详解)
- Android 之 EventBus用法详解
- android:toolbar用法详解
- Android搜索框SearchView属性和用法详解
- 详解Dagger2在Android开发中的新用法
- Android中Animation动画的介绍及用法详解
- 关于ormlite-android用法详解
- Android EventBus 3.0 用法及其原理详解
- Android spinner下垃菜单用法实例详解
- Android中shape的用法详解
- Android EditView 用法详解
- Android之viewstub用法详解及实现延迟加载
- Android网络编程Okhttp3用法详解
- Android之viewstub用法详解及实现延迟加载
- Android中Split()字符串分割特殊用法案例详解
- 源码详解Android中View.post()用法
- Android GridView中GridAdapter 用法详解