将事件添加到系统日历中,并且添加到提醒事项中

具体代码如下(代码来着网路):

/*

1.0版本示例

初始建立 将事件添加到系统日历中,并且添加到提醒事项中

 */

/*代码示例

 NSDate*startData=[NSDate dateWithTimeIntervalSinceNow:10];

 NSDate*endDate=[NSDate dateWithTimeIntervalSinceNow:20];

 //设置事件之前多长时候开始提醒

 float alarmFloat=-5;

 NSString*eventTitle=@"提醒事件标题";

 NSString*locationStr=@"提醒副标题";

 //isReminder 是否写入提醒事项

 [ZCActionOnCalendar saveEventStartDate:startData endDate:endDate alarm:alarmFloat eventTitle:eventTitle location:locationStr isReminder:YES];

 2014.4.29

 //注意 在参数第十八行需要设置不同的参数,然后进行判断是事件提醒还是日历事件

 //EKEntityMaskEvent提醒事项参数(该参数只能真机使用)  EKEntityTypeEvent日历时间提醒参数


 */

#import <Foundation/Foundation.h>


@interface ZCActionOnCalendar : NSObject

+ (void)saveEventStartDate:(NSDate*)startData endDate:(NSDate*)endDate alarm:(float)alarm eventTitle:(NSString*)eventTitle location:(NSString*)location isReminder:(BOOL)isReminder;

@end



#import "ZCActionOnCalendar.h"

#import <EventKit/EventKit.h>

@implementation ZCActionOnCalendar

+ (void)saveEventStartDate:(NSDate*)startData endDate:(NSDate*)endDate alarm:(float)alarm eventTitle:(NSString*)eventTitle location:(NSString*)location isReminder:(BOOL)isReminder{

    //事件市场

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    //6.0及以上通过下⾯面⽅方式写⼊入事件

    if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {

        //等待用户是否同意授权日历

        //EKEntityMaskEvent提醒事项参数(该参数只能真机使用)  EKEntityTypeEvent日历时间提醒参数

        [eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {

            

            dispatch_async(dispatch_get_main_queue(), ^{

                if (error)

                {

                }else if (!granted)

                {

                    //被⽤用户拒绝,不允许访问⽇日历

                    

                }else{

                    //事件保存到⽇日历

                    //创建事件

                    EKEvent *event = [EKEvent eventWithEventStore:eventStore];

                    event.title = eventTitle;

                    event.location = location;

                    //设定事件开始时间

                    //[NSDate dateWithTimeIntervalSinceNow:10];

                    event.startDate=startData;

                    

                    //设定事件结束时间

                    //[NSDate dateWithTimeIntervalSinceNow:20];

                    event.endDate=endDate;

                    //添加提醒可以添加多个,设定事件多久以前开始提醒

                    // event.allDay = YES;

                    //在事件前多少秒开始事件提醒-5.0f

                    [event addAlarm:[EKAlarm alarmWithRelativeOffset:alarm]];

                    

                    [event setCalendar:[eventStore defaultCalendarForNewEvents]];

                    NSError *err;

                    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

                    NSLog(@"保存成功");

                    

                    

                    

                    

                    

                    //是否写入提醒事项,提醒事项为iOS原生自带的,但是模拟器没有的

                    if (isReminder) {

                        EKCalendar * iDefaultCalendar = [eventStore defaultCalendarForNewReminders];

                        

                        EKReminder *reminder=[EKReminder reminderWithEventStore:eventStore];

                        reminder.calendar=[eventStore defaultCalendarForNewReminders];

                        

                        reminder.title=eventTitle;

                        reminder.calendar = iDefaultCalendar;

                        EKAlarm *alarm=[EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeIntervalSinceNow:-10]];

                        [reminder addAlarm:alarm];

                        NSError *error=nil;

                        

                        

                        [eventStore saveReminder:reminder commit:YES error:&error];

                        if (error) {

                            

                            NSLog(@"error=%@",error);

                            

                        }

                        

                    }

                }

                

            });

        }];

        

    }else{

        //4.05.0通过下述⽅方式添加无需判断用户是否同意访问日历

        //事件保存到⽇日历

        //创建事件

        EKEvent *event = [EKEvent eventWithEventStore:eventStore];

        event.title = eventTitle;

        event.location = location;

        //设定事件开始时间

        //[NSDate dateWithTimeIntervalSinceNow:10];

        event.startDate=startData;

        

        //设定事件结束时间

        //[NSDate dateWithTimeIntervalSinceNow:20];

        event.endDate=endDate;

        //添加提醒可以添加多个,设定事件多久以前开始提醒

        // event.allDay = YES;

        //在事件前多少秒开始事件提醒-5.0f

        [event addAlarm:[EKAlarm alarmWithRelativeOffset:alarm]];

        

        [event setCalendar:[eventStore defaultCalendarForNewEvents]];

        NSError *err;

        [eventStore saveEvent:event span:EKSpanThisEvent error:&err];

        NSLog(@"保存成功");

        

        //是否写入提醒事项,提醒事项为iOS原生自带的,但是模拟器没有的

        if (isReminder) {

            EKCalendar * iDefaultCalendar = [eventStore defaultCalendarForNewReminders];

            EKReminder *reminder=[EKReminder reminderWithEventStore:eventStore];

            reminder.calendar=[eventStore defaultCalendarForNewReminders];

            reminder.title=eventTitle;

            reminder.calendar = iDefaultCalendar;

            EKAlarm *alarm=[EKAlarm alarmWithAbsoluteDate:[NSDate dateWithTimeIntervalSinceNow:-10]];

            [reminder addAlarm:alarm];

            NSError *error=nil; 

            [eventStore saveReminder:reminder commit:YES error:&error];

            if (error) {

                NSLog(@"error=%@",error);

            }

        }

    }

}


需要的类库:UIEventKit.framework


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android Studio 将日程添加系统日历,可以按照以下步骤操作: 1. 添加日历权限: 在应用程序的 `AndroidManifest.xml` 文件添加 `WRITE_CALENDAR` 权限。例如: ```xml <uses-permission android:name="android.permission.WRITE_CALENDAR" /> ``` 2. 创建日历事件: 在需要添加日历事件的地方,使用以下代码创建日历事件: ```java ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, endMillis); values.put(CalendarContract.Events.TITLE, "My Event"); values.put(CalendarContract.Events.DESCRIPTION, "Description of my event"); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); long eventId = Long.parseLong(uri.getLastPathSegment()); ``` 其 `startMillis` 和 `endMillis` 分别是事件的开始时间和结束时间,可以使用 `Calendar` 类的 `getTimeInMillis()` 方法将日期转换为毫秒数。`CALENDAR_ID` 是日历账户的 ID,可以使用 `CalendarContract.Calendars` 表查询获得。`EVENT_TIMEZONE` 是事件的时区,可以使用 `TimeZone.getDefault().getID()` 获取本地时区。 3. 添加提醒: 如果需要为日历事件添加提醒,可以使用以下代码: ```java int minutes = 60; ContentValues reminderValues = new ContentValues(); reminderValues.put(CalendarContract.Reminders.MINUTES, minutes); reminderValues.put(CalendarContract.Reminders.EVENT_ID, eventId); reminderValues.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); cr.insert(CalendarContract.Reminders.CONTENT_URI, reminderValues); ``` 其 `minutes` 是提醒的时间,单位为分钟。`METHOD_ALERT` 表示使用默认的提醒方式,可以根据需要使用其他方式。 以上就是在 Android Studio 将日程添加系统日历的基本步骤。需要注意的是,要测试此功能,需要在真机上测试,因为模拟器默认没有日历应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值