热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android向系统日历中添加日程事件(本地推送)

读写权限是必须要加滴compilecom.lovedise:permissiongen:0.0.66.0权限包
读写权限是必须要加滴 

compile 'com.lovedise:permissiongen:0.0.6'//6.0权限包
添加事件

String data = "";
public void setReminderUtils(String strdata) {if (!MStringUtils.isNullOrEmpty(strdata)) {data = strdata;PermissionGen.with(MainActivity.this).addRequestCode(15).permissions(Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR).request();}
}
@PermissionSuccess(requestCode = 15)
public void doReminder() {if (!EventReminderUtils.selectCalendarEvent(this, data)) {EventReminderUtils.addCalendarEvent(this, data);}}
@PermissionFail(requestCode = 15)
public void doFailReminder() {MyToast.showMessage("手机应用权限被拒绝");
}
//删除事件
public void deleteReminder() {YouPinLog.e("Reminder", "setReminderUtils");PermissionGen.with(MainActivity.this).addRequestCode(16).permissions(Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR).request();
}
@PermissionSuccess(requestCode = 16)
public void dodeleteReminder() {EventReminderUtils.deleteCalendarEvent(this);}
@PermissionFail(requestCode = 16)
public void doFaildeleteReminder() {MyToast.showMessage("手机应用权限被拒绝");
}

package com.a.a.utils;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.net.Uri;
import android.provider.CalendarContract;import java.text.SimpleDateFormat;
import java.util.TimeZone;/*** 提醒* @author Administrator**/
public class EventReminderUtils
{public EventReminderUtils(){}private static String CALANDER_URL &#61; "content://com.android.calendar/calendars";private static String CALANDER_EVENT_URL &#61; "content://com.android.calendar/events";private static String CALANDER_REMIDER_URL &#61; "content://com.android.calendar/reminders";private static String CALENDARS_NAME &#61; "table";private static String CALENDARS_ACCOUNT_NAME &#61; "table&#64;table.com";private static String CALENDARS_ACCOUNT_TYPE &#61; "com.android.table";private static String CALENDARS_DISPLAY_NAME &#61; "帅帅";public static String DATETIME_FORMAT_PATTERN &#61; "yyyy-MM-dd HH:mm";//删除public static void deleteCalendarEvent(Context context){Cursor eventCursor &#61; context.getContentResolver().query(Uri.parse(CALANDER_EVENT_URL), null, null, null, null);try {if (eventCursor &#61;&#61; null)//查询返回空值return;if (eventCursor.getCount() > 0) {//遍历所有事件&#xff0c;找到title跟需要查询的title一样的项for (eventCursor.moveToFirst(); !eventCursor.isAfterLast(); eventCursor.moveToNext()) {String eventTitle &#61; eventCursor.getString(eventCursor.getColumnIndex("title"));if (eventTitle.startsWith("标题提醒")) {int id &#61; eventCursor.getInt(eventCursor.getColumnIndex(CalendarContract.Calendars._ID));//取得idUri deleteUri &#61; ContentUris.withAppendedId(Uri.parse(CALANDER_EVENT_URL), id);int rows &#61; context.getContentResolver().delete(deleteUri, null, null);if (rows &#61;&#61; -1) {//事件删除失败return;}}}}} finally {if (eventCursor !&#61; null) {eventCursor.close();}}}public static boolean selectCalendarEvent(Context context,String data){Cursor eventCursor &#61; context.getContentResolver().query(Uri.parse(CALANDER_EVENT_URL), null, null, null, null);try {if (eventCursor &#61;&#61; null)//查询返回空值return false;if (eventCursor.getCount() > 0) {//遍历所有事件&#xff0c;找到title跟需要查询的title一样的项for (eventCursor.moveToFirst(); !eventCursor.isAfterLast(); eventCursor.moveToNext()) {String eventTitle &#61; eventCursor.getString(eventCursor.getColumnIndex("title"));if (eventTitle.equals("标题提醒"&#43;data)) {return true;}}}return false;} finally {if (eventCursor !&#61; null) {eventCursor.close();}}}/*** 添加事件* &#64;param context*/public static void addCalendarEvent(Context context,String data){// 获取日历账户的idint calId &#61; checkAndAddCalendarAccount(context);if (calId <0) {// 获取账户id失败直接返回&#xff0c;添加日历事件失败return;}ContentValues event &#61; new ContentValues();event.put("title", "标题提醒"&#43;data);event.put("description", "您有一个美女未领&#xff0c;请尽快领取&#xff01;");// 插入账户的idevent.put("calendar_id", calId);long start &#61; getDateLong(data&#43;" 9:00");event.put(CalendarContract.Events.DTSTART, start);event.put(CalendarContract.Events.DTEND, start&#43;10*1000);event.put(CalendarContract.Events.HAS_ALARM, 1);//设置有闹钟提醒event.put(CalendarContract.Events.EVENT_TIMEZONE, "Asia/Shanghai"); //这个是时区&#xff0c;必须有&#xff0c;//添加事件Uri newEvent &#61; context.getContentResolver().insert(Uri.parse(CALANDER_EVENT_URL), event);if (newEvent &#61;&#61; null) {// 添加日历事件失败直接返回return;}//事件提醒的设定ContentValues values &#61; new ContentValues();values.put(CalendarContract.Reminders.EVENT_ID, ContentUris.parseId(newEvent));// 提前10分钟有提醒values.put(CalendarContract.Reminders.MINUTES, 10);values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);Uri uri &#61; context.getContentResolver().insert(Uri.parse(CALANDER_REMIDER_URL), values);if(uri &#61;&#61; null) {// 添加闹钟提醒失败直接返回return;}}//检查是否已经添加了日历账户&#xff0c;如果没有添加先添加一个日历账户再查询private static int checkAndAddCalendarAccount(Context context){int oldId &#61; checkCalendarAccount(context);if( oldId >&#61; 0 ){return oldId;}else{long addId &#61; addCalendarAccount(context);if (addId >&#61; 0) {return checkCalendarAccount(context);} else {return -1;}}}private static int checkCalendarAccount(Context context) {Cursor userCursor &#61; context.getContentResolver().query(Uri.parse(CALANDER_URL), null, null, null, null);try {if (userCursor &#61;&#61; null)//查询返回空值return -1;int count &#61; userCursor.getCount();if (count > 0) {//存在现有账户&#xff0c;取第一个账户的id返回userCursor.moveToFirst();return userCursor.getInt(userCursor.getColumnIndex(CalendarContract.Calendars._ID));} else {return -1;}} finally {if (userCursor !&#61; null) {userCursor.close();}}}private static long addCalendarAccount(Context context) {TimeZone timeZone &#61; TimeZone.getDefault();ContentValues value &#61; new ContentValues();value.put(CalendarContract.Calendars.NAME, CALENDARS_NAME);value.put(CalendarContract.Calendars.ACCOUNT_NAME, CALENDARS_ACCOUNT_NAME);value.put(CalendarContract.Calendars.ACCOUNT_TYPE, CALENDARS_ACCOUNT_TYPE);value.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, CALENDARS_DISPLAY_NAME);value.put(CalendarContract.Calendars.VISIBLE, 1);value.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.BLUE);value.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);value.put(CalendarContract.Calendars.SYNC_EVENTS, 1);value.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, timeZone.getID());value.put(CalendarContract.Calendars.OWNER_ACCOUNT, CALENDARS_ACCOUNT_NAME);value.put(CalendarContract.Calendars.CAN_ORGANIZER_RESPOND, 0);Uri calendarUri &#61; Uri.parse(CALANDER_URL);calendarUri &#61; calendarUri.buildUpon().appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true").appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, CALENDARS_ACCOUNT_NAME).appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CALENDARS_ACCOUNT_TYPE).build();Uri result &#61; context.getContentResolver().insert(calendarUri, value);long id &#61; result &#61;&#61; null ? -1 : ContentUris.parseId(result);return id;}/*** 日期格式字符串转换成时间戳** &#64;return*/public static long getDateLong(String date_str) {try {SimpleDateFormat sdf &#61; new SimpleDateFormat(DATETIME_FORMAT_PATTERN);return sdf.parse(date_str).getTime();} catch (Exception e) {e.printStackTrace();}return 0;}
}



推荐阅读
author-avatar
W布二
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有