做一个自定义的闹钟,首先要得到闹钟管理者(AlarmManager),然后得到系统当前时间。
/**
* 1.弹出时间对话框
* 2.确定好选择的时间
* 3.设置好闹钟
* 4.时间一到,执行响应(发送广播,接收广播。跳转页面)
* PendingIntent 延迟跳转 AlarmManager闹钟管理者
* Intent的组成部分:ComponementName extra Action Data Categlay(分组) Flag
*/
差不多就这么几个步骤。
闹钟可以设置一次以及多次。多次就是有一个周期(24小时响一次)。其不同之处在于:
一次:alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
多次:alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),5000, pendingIntent);
代码如下:
public class MainActivity extends AppCompatActivity {
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
private Button main_btn_alarm;
private Button main_btn_alarmcycle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取闹钟管理者
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
main_btn_alarm = (Button) findViewById(R.id.main_btn_alarm);
main_btn_alarmcycle= (Button) findViewById(R.id.main_btn_alarmcycle);
}
//设置闹钟(响一次)
public void setAlarm(View view){
//获取当前系统时间
Calendar c=Calendar.getInstance();
int hour=c.get(Calendar.HOUR_OF_DAY);//小时
int minute=c.get(Calendar.MINUTE);//分钟
/**
* 1.弹出时间对话框
* 2.确定好选择的时间
* 3.设置好闹钟
* 4.时间一到,执行响应(发送广播,接收广播。跳转页面)
* PendingIntent 延迟跳转 AlarmManager闹钟管理者
* Intent的组成部分:ComponementName extra Action Data Categlay(分组) Flag
*/
TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
//设置闹钟时间,确定时间。
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,i);
calendar.set(Calendar.MINUTE,i1);
//时间一到,执行响应
Intent intent=new Intent();
intent.setAction("com.example.yang_alarm_notification.RING");
PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
main_btn_alarm.setText("设置闹钟时间:"+i+"时"+i1+"分");
}
},hour,minute,true);
main_btn_alarm.setText("设置闹钟(响一次)");
timePickerDialog.show();
}
//设置闹钟(重复)
public void setAlarmCycle(View view){
//获取当前系统时间
Calendar c=Calendar.getInstance();
int hour=c.get(Calendar.HOUR_OF_DAY);//小时
int minute=c.get(Calendar.MINUTE);//分钟
/**
* 1.弹出时间对话框
* 2.确定好选择的时间
* 3.设置好闹钟
* 4.时间一到,执行响应(发送广播,接收广播。跳转页面)
* PendingIntent 延迟跳转 AlarmManager闹钟管理者
* Intent的组成部分:ComponementName extra Action Data Categlay(分组) Flag
*/
TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int i, int i1) {
//设置闹钟时间,确定时间。
Calendar calendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,i);
calendar.set(Calendar.MINUTE,i1);
//时间一到,执行响应
Intent intent=new Intent();
intent.setAction("com.example.yang_alarm_notification.RING");
pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),5000, pendingIntent);
main_btn_alarmcycle.setText("设置闹钟时间:"+i+"时"+i1+"分");
}
},hour,minute,true);
timePickerDialog.show();
}
//取消重复闹钟
public void CancelAlarmCycle(View view){
main_btn_alarmcycle.setText("设置闹钟(重复)");
alarmManager.cancel(pendingIntent);
}
}
我这里没有直接跳转,而是通过广播来跳转。利用Intent的Action。设置广播名字,详情请参考:http://blog.csdn.net/qq_35731570/article/details/54910216