碎碎念


不格网 m.vbuge.com

为啥要写这个库呢?

  • 尝试自己写一个库调用,学习一下这个流程,为以后做准备
  • 日历库在网上的资料太少了,而这个功能却又很实用
  • 自己做的项目都会涉及到事件导出功能,不想重复写代码

这个库目前可以支持日历事件的直接导出、删除,ics文件的生成

ics生成文件中支持重复规则

目前该库还在完善中🔨

欢迎提供建议❤

使用方法

引入

在项目中引用即可


implementation 'com.paul.eventreminder:eventreminder:0.0.3'



使用教程

CalendarManager

不是特别方便的初始化方法:

你需要提供Activity(用来获取权限)以及日历账户配置名称

首先声明一个Manager:



CalendarManager calendarManager=new CalendarManager(this,"测试");

会自动请求日历写入权限,如果拒绝这一块逻辑我没有处理,你可以在自己的代码中去实现该逻辑。

添加一个事件的时候你需要创建一个CalendarEvent 对象,或者您也可以选择继承自这个类

属性如下:



//总结
String summary;
//内容
String content;
//地点
String loc;
//周次
List<Integer> weekList;
//周几
int dayOfWeek;
//开始时间
String startTime;
//结束时间
String endTime;

这里的weeklist至关重要,因为通过该集合来控制事件的重复

考虑到部分存在[1,2,3,4,8,10]这种不规则的形式,因此采用逐一导入的方法。

开始时间和结束时间的格式为 :“8:00”

创建好你的事件后调用addCalendarEvent方法即可,这里需要传入一个当前周次来告诉我当前所处时间位置。这个周次一定是在你提供的weekList中的。



public  void addCalendarEvent(CalendarEvent mySubject, int curWeek,OnExportProgressListener listener)

当然你也可以选择不传curWeek这个参数,会自动默认添加从1月1号到当前时间过了几周

在添加事件事前,你也可以为其设置提醒



calendarManager.setAlarm(true);//开启提醒
calendarManager.setAlarmTime(15);//15分钟

删除事件也很简单,直接调用delete方法即可。



public void deleteCalendarEvent(Context context,OnExportProgressListener listener)

值得一提的是,删除判断的是事件内容末尾的@+ACCOUNT_NAME,所以请保持该名称在创建和删除时候要相同。

ICSManager

初始化:



ICSManager icsManager=new ICSManager(Context context,String userName);

同Calendar一样,你需要创建对应的CalendarEvent并传入



icsManager.OutPutIcsFile(String filename,boolean useRule,List<CalendarEvent> calendarEvents,int curWeek,OutPutListener listener)

这里有一个参数为useRule,为bool类型

true代表开启重复规则,false代表关闭

开启重复规则后,根据你提供的weeklist来进行判断



形如 [1,2,3,4,5,6]或者[2,4,6,8,10]或者[1,3,5,7,9]都可以支持规则导出
但如果是这种[1,2,3,4,6,8]不规则的,会自动按照重复逐一导出

开启提醒的方式:



icsManager.setAlarm_seconds(15);
icsManager.setFalg_alarm(true);

在回调函数中,onSuccess方法会传回来一个生成文件路径,由于该文件是保存在包名下的私有目录,因此不需要任何读写权限。

你也可以直接调用File来处理他。

项目github地址:https://github.com/paul623/EventReminder

具体实例请看项目内的代码。