一、创建定时器
设置权限
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
案例
https://developer.android.com/reference/android/provider/AlarmClock.html#EXTRA\_MESSAGE
public void createAlarm(String message, int hour, int minutes) { Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_HOUR, hour) .putExtra(AlarmClock.EXTRA_MINUTES, minutes); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
可重复闹铃
1EXTRA_DAYS 2一个 ArrayList,其中包括应重复触发该闹铃的每个周日。 每一天都必须使用 Calendar 类中的某个整型值(如 MONDAY)进行声明。 3对于一次性闹铃,无需指定此 extra。
参考
https://developer.android.google.cn/guide/components/intents-common.html?hl=zh-cn#Clock
创建系统定时器
public void startTimer(String message, int seconds) { Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER) .putExtra(AlarmClock.EXTRA_MESSAGE, message) .putExtra(AlarmClock.EXTRA_LENGTH, seconds) .putExtra(AlarmClock.EXTRA_SKIP_UI, true); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
二、添加日历事件
添加权限
1<uses-permission android:name="android.permission.READ_CALENDAR" /> 2 3<uses-permission android:name="android.permission.WRITE_CALENDAR" />
添加日历事件
https://developer.android.com/reference/android/provider/AlarmClock.html#EXTRA\_MESSAGE
public void addEvent(String title, String location, Calendar begin, Calendar end) { Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .putExtra(Events.TITLE, title) .putExtra(Events.EVENT_LOCATION, location) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } }
三、通过ContentProvider设置日历
uri matcher
1private static String CALANDER_URL = "content://com.android.calendar/calendars"; 2 3private static String CALANDER_EVENT_URL = "content://com.android.calendar/events"; 4 5private static String CALANDER_REMIDER_URL = "content://com.android.calendar/reminders";
插入
1/** 2 * 增加日历提醒事件 3 * @param activity 4 * @param dataEntity 5 * @param isRecord 6 * @return 7 */ 8 public static boolean addCalendarReminder(Activity activity,DataEntity dataEntity, boolean isRecord) { 9 10 11 if (!AactivityCompat.hasPermissions(activity, Manifest.permission.WRITE_CALENDAR, Manifest.permission.READ_CALENDAR)) { 12 return false; 13 } 14 15 16 try { 17 18// Calendar startCalendar = Calendar.getInstance(); 19// long startTime = startCalendar.getTimeInMillis() + 8 * 60 * 1000; 20 long startTime = dataEntity.getRemind_time(); 21// Calendar endCalendar = Calendar.getInstance(); 22// long endTime = endCalendar.getTimeInMillis() + 50 * 60 * 1000; 23 long endTime = startTime + 10 * 60 * 1000; 24 String remindTitle = dataEntity.getTitle(); 25 26 // 日历事件 27 ContentValues calEvent = new ContentValues(); 28 calEvent.put(CalendarContract.Events.CALENDAR_ID, 1); // XXX pick) 29 calEvent.put(CalendarContract.Events.TITLE, remindTitle); 30 calEvent.put(CalendarContract.Events.DTSTART, startTime); 31 calEvent.put(CalendarContract.Events.DTEND, endTime); 32 calEvent.put(CalendarContract.Events.HAS_ALARM, 1); 33 calEvent.put(CalendarContract.Events.EVENT_TIMEZONE, CalendarContract.Calendars.CALENDAR_TIME_ZONE); 34 35 ContentResolver cr = activity.getContentResolver(); 36 if (null == cr) { 37 return false; 38 } 39 try { 40 Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, calEvent); 41 if (null == uri) { 42 return false; 43 } 44 int eventId = Integer.parseInt(uri.getLastPathSegment()); 45 46 /** 记录code 记录eventId **/ 47 if (isRecord) { 48 saveEventCode(dataEntity.getProduct_code()); 49 saveEventId(eventId); 50 } 51 52 // 日历提醒 53 ContentValues reminders = new ContentValues(); 54 reminders.put(CalendarContract.Reminders.EVENT_ID, eventId); 55 reminders.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); 56 reminders.put(CalendarContract.Reminders.MINUTES, REMIND_MINUTES); 57 cr.insert(CalendarContract.Reminders.CONTENT_URI, reminders); 58 59 return true; 60 } catch (SecurityException ignore) {} 61 } catch (Exception ignore) {} 62 63 return false; 64 }
参考:http://blog.csdn.net/zhaoshuyu111/article/details/53195142