参考资料

CalendarDataHelper

Events

Reminders

api讲解

添加权限

在config.json添加权限代码如下

 "reqPermissions": [
{
"name": "ohos.permission.READ_CALENDAR"
},
{
"name": "ohos.permission.WRITE_CALENDAR"
},
{
"name": "ohos.permission.PUBLISH_AGENT_REMINDER"
}
]

在java代码动态注册权限

public class MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
String[] permissions = {
"ohos.permission.READ_CALENDAR",
"ohos.permission.WRITE_CALENDAR",
"ohos.permission.PUBLISH_AGENT_REMINDER"
};
requestPermissionsFromUser(permissions, 0);
super.onStart(intent);
super.setMainRoute(MainAbilitySlice.class.getName());
}
}

添加日历事件
    public void insert(Context context) {
try {
EventsHelper = CalendarDataHelper.creator(context, Events.class);
//新增日历事件
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putInteger(EventsColumns.ACC_ID, 1);
valuesBucket.putNull(EventsColumns.DURATION);
valuesBucket.putString(EventsColumns.START_TIMEZONE, TimeZone.getDefault().getID());
valuesBucket.putString(EventsColumns.EVENT_POSITION, "上海");
valuesBucket.putString(EventsColumns.TITLE, "标题");
valuesBucket.putString(EventsColumns.DESCRIPTION, "描述");
valuesBucket.putLong(EventsColumns.EVENT_START_TIME, System.currentTimeMillis());
valuesBucket.putLong(EventsColumns.EVENT_END_TIME, System.currentTimeMillis()+8*1000*60*60);
boolean isok= EventsHelper.insert(valuesBucket);
System.err.println(isok?"####===>添加成功":"#####===>>添加失败");
} catch (DataAbilityRemoteException e) {
System.out.println(e.toString());
e.printStackTrace();
}
}

修改日历事件
  String PREDICTOR_TEMPLATE = "(%s)";
String sq1 = String.format(
Locale.ENGLISH,
PREDICTOR_TEMPLATE,
"calendar_id =" + 1);
DataAbilityPredicates predicates = new DataAbilityPredicates(sq1);
EventsHelper = CalendarDataHelper.creator(context, Events.class);
//新增日历事件
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putInteger(EventsColumns.ACC_ID, 1);
valuesBucket.putString(EventsColumns.TITLE, "修改标题");
//修改日历事件
boolean isupdate = EventsHelper.update(valuesBucket, predicates);
if (isupdate) {
System.err.println("#######====>修改成功");
} else {
System.err.println("#######====>修改失败");
}

查询日历事件
  String PREDICTOR_TEMPLATE = "(%s)";
String sq1 = String.format(
Locale.ENGLISH,
PREDICTOR_TEMPLATE,
"calendar_id =" + 1);
DataAbilityPredicates predicates = new DataAbilityPredicates(sq1);
EventsHelper = CalendarDataHelper.creator(context, Events.class);
//查询日历事件
String[] eventColumns = new String[]{
Events.ID,
EventsColumns.TITLE,
EventsColumns.DESCRIPTION,
EventsColumns.EVENT_START_TIME,
EventsColumns.EVENT_END_TIME,
};
CalendarCollection calendarCollection = null;
calendarCollection = EventsHelper.query(predicates, eventColumns);
int id=-1;
while (calendarCollection != null && calendarCollection.hasNext()) {
Events resultEntity = (Events) calendarCollection.next()
.filter(entity -> entity instanceof Events)
.orElse(null);
System.err.println("####====>>"+resultEntity.getTitle() + "=" + resultEntity.getDescription()+"="+resultEntity.getId());
id=resultEntity.getId();
// Optional.ofNullable(calendarCollection).ifPresent(CalendarCollection::close);

删除日历事件
  EventsHelper = CalendarDataHelper.creator(ability, Events.class);
DataAbilityPredicates predicates = new DataAbilityPredicates("title like '%修改标题%'");
int flag = EventsHelper.delete(predicates);
System.err.println(flag > 0 ? "####===》删除成功" : "####===》删除失败");

添加日历提醒
        CalendarDataHelper      RemindersHelper = CalendarDataHelper.creator(context, Reminders.class);
ValuesBucket reminderBucket = new ValuesBucket();
reminderBucket.putInteger(RemindersColumns.EVENT_ID, id);
reminderBucket.putInteger(RemindersColumns.REMIND_TYPE, RemindersColumns.TYPE_ALARM);
reminderBucket.putInteger(RemindersColumns.REMIND_MINUTES, 1);
reminderBucket.putInteger("method",1);
boolean isok= false;
try {
isok = RemindersHelper.insert(reminderBucket);
} catch (DataAbilityRemoteException e) {
e.printStackTrace();
}
System.err.println(isok?"###===>设置成功"+id:"#####====>>设置失败"+id);

运行效果

全部代码
xml布局
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:alignment="center"
ohos:orientation="vertical">
<Button
ohos:height="80vp"
ohos:width="match_parent"
ohos:text="添加事件"
ohos:text_size="20fp"
ohos:id="$+id:insertEvent"/>
<Button
ohos:height="80vp"
ohos:width="match_parent"
ohos:text="修改事件"
ohos:background_element="#ed6262"
ohos:text_size="20fp"
ohos:id="$+id:UpdateEvent"/>
<Button
ohos:height="80vp"
ohos:width="match_parent"
ohos:text="查询事件"
ohos:text_size="20fp"
ohos:id="$+id:selectEvent"/>
<Button
ohos:height="80vp"
ohos:width="match_parent"
ohos:text="设置提醒"
ohos:background_element="#ed6262"
ohos:text_size="20fp"
ohos:id="$+id:setReminders"/>
<Button
ohos:height="80vp"
ohos:width="match_parent"
ohos:text="删除"
ohos:text_size="20fp"
ohos:id="$+id:deleteEvent"/> </DirectionalLayout>

java代码

import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.ability.DataAbilityRemoteException;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.data.dataability.DataAbilityPredicates;
import ohos.data.rdb.ValuesBucket;
import ohos.sysappcomponents.calendar.CalendarCollection;
import ohos.sysappcomponents.calendar.CalendarDataHelper;
import ohos.sysappcomponents.calendar.column.EventsColumns;
import ohos.sysappcomponents.calendar.column.RemindersColumns;
import ohos.sysappcomponents.calendar.entity.Events;
import ohos.sysappcomponents.calendar.entity.Reminders; import java.util.Locale;
import java.util.TimeZone; public class MainAbilitySlice extends AbilitySlice {
private CalendarDataHelper EventsHelper = CalendarDataHelper.creator(this, Events.class);
private int id;
CalendarDataHelper RemindersHelper = CalendarDataHelper.creator(this, Reminders.class);
@Override
public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main); findComponentById(ResourceTable.Id_insertEvent).setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
try {
//新增日历事件
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putInteger(EventsColumns.ACC_ID, 1);
valuesBucket.putNull(EventsColumns.DURATION);
valuesBucket.putString(EventsColumns.START_TIMEZONE, TimeZone.getDefault().getID());
valuesBucket.putString(EventsColumns.EVENT_POSITION, "上海");
valuesBucket.putString(EventsColumns.TITLE, "标题");
valuesBucket.putString(EventsColumns.DESCRIPTION, "描述");
valuesBucket.putLong(EventsColumns.EVENT_START_TIME, System.currentTimeMillis());
valuesBucket.putLong(EventsColumns.EVENT_END_TIME, System.currentTimeMillis()+8*1000*60*60);
boolean isok= EventsHelper.insert(valuesBucket);
System.err.println(isok?"####===>添加成功":"#####===>>添加失败");
} catch (DataAbilityRemoteException e) {
System.out.println(e.toString());
e.printStackTrace();
}
}
});
findComponentById(ResourceTable.Id_UpdateEvent).setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
try {
String PREDICTOR_TEMPLATE = "(%s)";
String sq1 = String.format(
Locale.ENGLISH,
PREDICTOR_TEMPLATE,
"calendar_id =" + 1);
DataAbilityPredicates predicates = new DataAbilityPredicates(sq1);
//新增日历事件
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putInteger(EventsColumns.ACC_ID, 1);
valuesBucket.putString(EventsColumns.TITLE, "修改标题");
//修改日历事件
boolean isupdate = EventsHelper.update(valuesBucket, predicates);
if (isupdate) {
System.err.println("#######====>修改成功");
} else {
System.err.println("#######====>修改失败");
}
}catch (Exception e){
e.printStackTrace();
System.err.println("######====>"+e.getMessage());
} }
}); findComponentById(ResourceTable.Id_selectEvent).setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
try {
String PREDICTOR_TEMPLATE = "(%s)";
String sq1 = String.format(
Locale.ENGLISH,
PREDICTOR_TEMPLATE,
"calendar_id =" + 1);
DataAbilityPredicates predicates = new DataAbilityPredicates(sq1);
//新增日历事件
//查询日历事件
String[] eventColumns = new String[]{
Events.ID,
EventsColumns.TITLE,
EventsColumns.DESCRIPTION,
EventsColumns.EVENT_START_TIME,
EventsColumns.EVENT_END_TIME,
};
CalendarCollection calendarCollection = null;
calendarCollection = EventsHelper.query(predicates, eventColumns);
while (calendarCollection != null && calendarCollection.hasNext()) {
Events resultEntity = (Events) calendarCollection.next()
.filter(entity -> entity instanceof Events)
.orElse(null);
System.err.println("####====>>"+resultEntity.getTitle() + "=" + resultEntity.getDescription()+"="+resultEntity.getId());
id=resultEntity.getId();
// Optional.ofNullable(calendarCollection).ifPresent(CalendarCollection::close); } } catch (DataAbilityRemoteException e) {
e.printStackTrace();
}
}
});
findComponentById(ResourceTable.Id_deleteEvent).setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) {
try {
DataAbilityPredicates predicates = new DataAbilityPredicates("title like '%修改标题%'");
int flag = EventsHelper.delete(predicates);
System.err.println(flag > 0 ? "####===》删除成功" : "####===》删除失败");
} catch (Exception e) {
e.printStackTrace();
}
}
}); findComponentById(ResourceTable.Id_setReminders).setClickedListener(new Component.ClickedListener() {
@Override
public void onClick(Component component) { ValuesBucket reminderBucket = new ValuesBucket();
reminderBucket.putInteger(RemindersColumns.EVENT_ID, id);
reminderBucket.putInteger(RemindersColumns.REMIND_TYPE, RemindersColumns.TYPE_ALARM);
reminderBucket.putInteger(RemindersColumns.REMIND_MINUTES, 1);
reminderBucket.putInteger("method",1);
boolean isok= false;
try {
isok = RemindersHelper.insert(reminderBucket);
} catch (DataAbilityRemoteException e) {
e.printStackTrace();
}
System.err.println(isok?"###===>设置成功"+id:"#####====>>设置失败"+id);
}
}); } }

运行效果

欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

【Java UI】HarmonyOS添加日历事件的更多相关文章

  1. 设置代码ios 6添加日历事件No calendar has been set.错误

    查了好多资料,发明还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 在iOS 6做日历事件添加时,来来回回报错,No calendar has been set ...

  2. Android向系统日历中添加日程事件

    转自Android向系统日历中添加日程事件 总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: ...

  3. 调用Android自带日历功能(日历列表单、添加一个日历事件)

    调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...

  4. Swift - 使用EventKit获取系统日历事件,添加事件

    通过EventKit可以对iOS日历事件进行读取,添加等操作.但网上找到的都是使用Objective-C来编写的. 下面提供一个Swift版的样例,演示如何添加一个事件以及获取所有的事件列表. 1 2 ...

  5. HarmonyOS Java UI之DirectionalLayout布局

    在之前的章节中我使用的是Java 代码构建UI界面,从本节开始,将使用XML构建UI界面. 使用XML构建UI(默认你已经会在项目中创建XML布局文件)界面相对Java代码构建的好处是:结构清晰,代码 ...

  6. HarmonyOS Java UI之DependentLayout布局示例

    DependentLayout简介 DependentLayout意为相对位置布局,与DirectionalLayout相比较有更多的排布方式,每个组件可以指定相对于其他同级组件的位置,也可以指定相对 ...

  7. 5.JAVA之GUI编程窗体事件

    我们回顾下第三篇时的内容: 在3.JAVA之GUI编程Frame窗口中窗体是无法直接关闭的,想要关闭须进程管理器结束进程方式关掉. 现在我们就来解决下这个问题. ******************* ...

  8. 6.JAVA之GUI编程Action事件

    功能:单击一个按钮实现关闭窗口: import java.awt.*; import java.awt.event.*; public class StudyAction { // 定义该图形所需的组 ...

  9. Unity3D NGUI 给button按钮添加单间事件

    Unity3D中, NGUI 给button按钮添加单间事件的方法很多,在这里只给推荐一种比较常用的方法. 推荐方法:使用UIListener. 1.给button组价添加上UIListener.选择 ...

随机推荐

  1. 【小程序自动化Minium】三、元素定位- WXSS 选择器的使用

    最近更新略疲,主要是业余时间多了几个变化.比如忙活自己的模拟赛车驾舱升级.还跟朋友筹备一个小程序项目.另外早上的时间留给背单词了... 上一章中讲到Page接口的get_element()与get_e ...

  2. Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性

    一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求 ...

  3. labview从入门到出家8(进阶篇)--简单好用的状态机

    labview的状态机类似于一个软件框架的基本单元,好的软件框架和软件思路采用一个好的状态机,就如虎添翼了.这章给大家讲一个本人常用的一个状态机,基本上以前的项目都是建立在这个状态机上完成的,当然网上 ...

  4. Fleet 使用感受

    1. 前言 笔者主要使用的编程语言是 Java.平时使用的 IDE 是 JetBrains 公司的 IntelliJ IDEA.有时候也会打开该公司旗下的 PyCharm.DataGrip.WebSt ...

  5. SpringBoot开发 - 什么是热部署和热加载?devtool的原理是什么?

    在SpringBoot开发调试中,如果我每行代码的修改都需要重启启动再调试,可能比较费时间:SpringBoot团队针对此问题提供了spring-boot-devtools(简称devtools)插件 ...

  6. 【一知半解】synchronied

    synchronized是什么 synchronized是java同步锁,同一时刻多个线程对同一资源进行修改时,能够保证同一时刻只有一个线程获取到资源并对其进行修改,因此保证了线程安全性. synch ...

  7. MongoDB慢查询与索引

    MongoDB慢查询 慢查询分析 开启内置的慢查询分析器 db.setProfilingLevel(n,m),n的取值可选0,1,2 0:表示不记录 1:表示记录慢速操作,如果值为1,m需要传慢查询的 ...

  8. 002 JWT令牌

    1.JWT数据 Json Web Token 添加数据 --> 解析数据 --> 传递数据 1.1 JWT数据处传递流程 注意:JWT数据必须携带在请求头(Request Header)的 ...

  9. NewApiDay03_File类

    File类创建一个新文件 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径) 使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小 ...

  10. Solution -「BZOJ3894」文理分科

    Sol. 说实话,对于一个初学者,这道题很难看出是一道网络流-最小割.对于一个熟练者,这是比较套路的一种模型. 最小割,可以看做是在一个图中删掉最小的边权和使得源点.汇点不连通.或者换一个角度,可以看 ...