1、创建闹钟和倒计时
必须的权限:
< uses-permission android:name=”com.android.alarm.permission.SET_ALARM” />
闹钟:如果我们借助AlarmManager开发一个用药提醒的APP,一旦APP进程被用户干掉后,就没法提醒了,这时我们就只能借助系统闹钟来曲线救国了。
private void createAlarm(String message, int hour, int minutes, int resId) {
ArrayList<Integer> testDays = new ArrayList<>();
testDays.add(Calendar.MONDAY);//周一
testDays.add(Calendar.TUESDAY);//周二
testDays.add(Calendar.FRIDAY);//周五
String packageName = getApplication().getPackageName();
Uri ringtoneUri = Uri.parse("android.resource://" + packageName + "/" + resId);
//action为AlarmClock.ACTION_SET_ALARM
Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
//闹钟的小时
.putExtra(AlarmClock.EXTRA_HOUR, hour)
//闹钟的分钟
.putExtra(AlarmClock.EXTRA_MINUTES, minutes)
//响铃时提示的信息
.putExtra(AlarmClock.EXTRA_MESSAGE, message)
//用于指定该闹铃触发时是否振动
.putExtra(AlarmClock.EXTRA_VIBRATE, true)
//一个 content: URI,用于指定闹铃使用的铃声,也可指定 VALUE_RINGTONE_SILENT 以不使用铃声。
//如需使用默认铃声,则无需指定此 extra。
.putExtra(AlarmClock.EXTRA_RINGTONE, ringtoneUri)
//一个 ArrayList,其中包括应重复触发该闹铃的每个周日。
// 每一天都必须使用 Calendar 类中的某个整型值(如 MONDAY)进行声明。
//对于一次性闹铃,无需指定此 extra
.putExtra(AlarmClock.EXTRA_DAYS, testDays)
//如果为true,则调用startActivity()不会进入手机的闹钟设置界面
.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
倒计时
public void startTimer(String message, int seconds) {
//action为AlarmClock.ACTION_SET_TIMER
Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
.putExtra(AlarmClock.EXTRA_MESSAGE, message)
//倒计总时长,以秒为单位
.putExtra(AlarmClock.EXTRA_LENGTH, seconds)
//是否要进入系统的倒计时设置界面
.putExtra(AlarmClock.EXTRA_SKIP_UI, false);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
2、添加系统日历事件
public void addCalendarEvent(String title,String desc, String location) {
Calendar beginC = Calendar.getInstance();
beginC.add(Calendar.DAY_OF_MONTH,1);
Calendar endC = Calendar.getInstance();
endC.add(Calendar.DAY_OF_MONTH,6);
//action为Intent.ACTION_INSERT
Intent intent = new Intent(Intent.ACTION_INSERT)
.setData(CalendarContract.Events.CONTENT_URI)
//事件的开始时间(从新纪年开始计算的毫秒数)。
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginC)
//事件的结束时间(从新纪年开始计算的毫秒数)。
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endC)
//指定此事件是否为全天事件。
.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY,true)
//事件地点。
.putExtra(CalendarContract.Events.EVENT_LOCATION, location)
//事件标题。
.putExtra(CalendarContract.Events.TITLE, title)
//事件说明
.putExtra(CalendarContract.Events.DESCRIPTION,desc);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}