代码:

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.provider.CalendarContract;

import android.provider.CalendarContract.Calendars;

import android.view.View;

import android.widget.Toast;

import java.util.Calendar;

import java.util.TimeZone;

public class MainActivity extends Activity {

//Android2.2版本以后的URL,之前的就不写了

private static String calanderURL = "content://com.android.calendar/calendars";

private static String calanderEventURL = "content://com.android.calendar/events";

private static String calanderRemiderURL = "content://com.android.calendar/reminders";

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

public void onClick(View v) {

if (v.getId() == R.id.readUserButton) { //读取系统日历账户,如果为0的话先添加

Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null, null, null, null);

System.out.println("Count: " + userCursor.getCount());

Toast.makeText(this, "Count: " + userCursor.getCount(), Toast.LENGTH_LONG).show();

for (userCursor.moveToFirst(); !userCursor.isAfterLast(); userCursor.moveToNext()) {

System.out.println("name: " + userCursor.getString(userCursor.getColumnIndex("ACCOUNT_NAME")));

String userName1 = userCursor.getString(userCursor.getColumnIndex("name"));

String userName0 = userCursor.getString(userCursor.getColumnIndex("ACCOUNT_NAME"));

Toast.makeText(this, "NAME: " + userName1 + " -- ACCOUNT_NAME: " + userName0, Toast.LENGTH_LONG).show();

}

} else if (v.getId() == R.id.inputaccount) { //添加日历账户

initCalendars();

} else if (v.getId() == R.id.delEventButton) { //删除事件

int rownum = getContentResolver().delete(Uri.parse(calanderURL), "_id!=-1", null); //注意:会全部删除所有账户,新添加的账户一般从id=1开始,

//可以令_id=你添加账户的id,以此删除你添加的账户

Toast.makeText(MainActivity.this, "删除了: " + rownum, Toast.LENGTH_LONG).show();

} else if (v.getId() == R.id.readEventButton) { //读取事件

Cursor eventCursor = getContentResolver().query(Uri.parse(calanderEventURL), null, null, null, null);

if (eventCursor.getCount() > 0) {

eventCursor.moveToLast(); //注意:这里与添加事件时的账户相对应,都是向最后一个账户添加

String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));

Toast.makeText(MainActivity.this, eventTitle, Toast.LENGTH_LONG).show();

}

} else if (v.getId() == R.id.writeEventButton) {

// 获取要出入的gmail账户的id

String calId = "";

Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null, null, null, null);

if (userCursor.getCount() > 0) {

userCursor.moveToLast(); //注意:是向最后一个账户添加,开发者可以根据需要改变添加事件 的账户

calId = userCursor.getString(userCursor.getColumnIndex("_id"));

} else {

Toast.makeText(this, "没有账户,请先添加账户", Toast.LENGTH_LONG).show();

return;

}

ContentValues event = new ContentValues();

event.put("title", "提醒测试Title");

event.put("description", "这是一条日历提醒测试内容.lol~");

// 插入账户

event.put("calendar_id", calId);

System.out.println("calId: " + calId);

event.put("eventLocation", "测试地点");

Calendar mCalendar = Calendar.getInstance();

mCalendar.set(Calendar.HOUR_OF_DAY, 14);

mCalendar.set(Calendar.MINUTE, 53);

long start = mCalendar.getTime().getTime();

mCalendar.set(Calendar.HOUR_OF_DAY, 15);

long end = mCalendar.getTime().getTime();

event.put(CalendarContract.Events.DTSTART, start);//开始时间

event.put(CalendarContract.Events.DTEND, end);//结束时间

//设置一个全天事件的条目

//event.put("allDay", 1); // 0 for false, 1 for true

//事件状态暂定(0),确认(1)或取消(2)

//event.put("eventStatus", 1);

//控制是否事件触发报警,提醒如下

event.put(CalendarContract.Events.HAS_ALARM, 1); // 0 for false, 1 for true

//设置时区,否则会报错

event.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

//添加事件

Uri newEvent = getContentResolver().insert(Uri.parse(calanderEventURL), event);

//事件提醒的设定

long id = Long.parseLong(newEvent.getLastPathSegment());

ContentValues values = new ContentValues();

values.put(CalendarContract.Reminders.EVENT_ID, id);

// 提前5分钟有提醒(提前0分钟时,值为0)

values.put(CalendarContract.Reminders.MINUTES, 5);

values.put(CalendarContract.Reminders.METHOD, 1);

Uri uri = getContentResolver().insert(Uri.parse(calanderRemiderURL), values);

if (uri == null) {

// 添加闹钟提醒失败直接返回

Toast.makeText(MainActivity.this, "插入事件失败!!!", Toast.LENGTH_LONG).show();

return;

}

Toast.makeText(MainActivity.this, "插入事件成功!!!", Toast.LENGTH_LONG).show();

}

}

//添加账户

private void initCalendars() {

TimeZone timeZone = TimeZone.getDefault();

ContentValues value = new ContentValues();

value.put(Calendars.NAME, "yy");

value.put(Calendars.ACCOUNT_NAME, "mygmailaddress@gmail.com");

value.put(Calendars.ACCOUNT_TYPE, "com.android.exchange");

value.put(Calendars.CALENDAR_DISPLAY_NAME, "mytt");

value.put(Calendars.VISIBLE, 1);

value.put(Calendars.CALENDAR_COLOR, -9206951);

value.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER);

value.put(Calendars.SYNC_EVENTS, 1);

value.put(Calendars.CALENDAR_TIME_ZONE, timeZone.getID());

value.put(Calendars.OWNER_ACCOUNT, "mygmailaddress@gmail.com");

value.put(Calendars.CAN_ORGANIZER_RESPOND, 0);

Uri calendarUri = Calendars.CONTENT_URI;

calendarUri = calendarUri.buildUpon()

.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")

.appendQueryParameter(Calendars.ACCOUNT_NAME, "mygmailaddress@gmail.com")

.appendQueryParameter(Calendars.ACCOUNT_TYPE, "com.android.exchange")

.build();

getContentResolver().insert(calendarUri, value);

}

}

布局文件:

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical">

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="向系统日历中添加事件" />

android:id="@+id/inputaccount"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClick"

android:text="添加账户" />

android:id="@+id/readUserButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClick"

android:text="查看账户" />

android:id="@+id/readEventButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClick"

android:text="查看事件" />

android:id="@+id/writeEventButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClick"

android:text="插入事件" />

android:id="@+id/delEventButton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:onClick="onClick"

android:text="删除事件" />

需要添加的权限:

这里说一下有两个地方需要注意:

1、设置提前几分钟提醒时,如果是准时提醒的话需要设置为0

// 提前5分钟有提醒(提前0分钟时,值为0)

values.put(CalendarContract.Reminders.MINUTES, 5);

2、需要设置 提醒的次数

values.put(CalendarContract.Reminders.METHOD, 1);

android 系统提醒功能,Android 向系统日历中添加提醒(踩坑)相关推荐

  1. 如何发布日历提醒推送消息服务器,iOS开发 -- 通过app向手机自带的日历中添加事件提醒...

    在如今实际开发中,我们会有一种需求---通过自己的app往系统自带的日历中添加提醒事件. 一: 首先上最后效果图: WechatIMG7.jpeg 下图是关于添加事件的详情 WechatIMG8.jp ...

  2. 如何在App中实现朋友圈功能之四在朋友圈中添加发送图片功能——箭扣科技Arrownock

    如何在App中实现朋友圈功能 之四 在朋友圈中添加发送图片功能 实现概念: 当用户在界面点击发送按钮的时候,如果已经有选择好的图片,我们的做法是先上传图片到服务器,再将图片Id作为Post的属性上传. ...

  3. android 添加日程失败,Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

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

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

  5. Android 在系统日历中添加日程

    在项目开发过程中,有时会有预约提醒.定时提醒等需求,这时我们可以使用系统日历来辅助提醒.通过向系统日历中写入事件.设置提醒方式(闹钟),实现到达某个特定的时间自动提醒的功能.这样做的好处是由于提醒功能 ...

  6. android系统应用功能,Android系统应用(12)

    如何成为系统应用 方法一:在Manifest中声明android:sharedUserId的值为:android.uid.system,android.uid.phone,android.uid.lo ...

  7. 【安卓开发 】Android初级开发(十二)Android向系统日历中添加事件

    1.首先需要获取权限 <uses-permission android:name="android.permission.READ_CALENDAR" /><us ...

  8. android开启照相功能,Android打开系统相机并拍照的2种显示方法

    本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下 目标效果: 第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚. ...

  9. android 选择答题功能,Android实现简单的答题系统

    本文实例为大家分享了Android实现答题系统的具体代码,供大家参考,具体内容如下 Question: package com.example.lenovo.exam; /** * Created b ...

  10. android 本地提醒功能,android中的本地定时推送到通知栏

    一.使用系统定义的Notification 以下是使用示例代码: import android.app.Notification; import android.app.NotificationMan ...

最新文章

  1. 50岁马斯克又恋爱了!27岁金发女友长着芭比娃娃脸
  2. Linux预备知识(一):进程隔离
  3. aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?
  4. 在Chrome插件上获取当前插件的版本号
  5. CSP2019洛谷P5666:树的重心
  6. linux gpt引导分区,linux 引导gpt分区windows及clover
  7. Linux查看主板的相关信息
  8. 华为2018春招笔试题目 字节流解析与长整数相乘
  9. php--字符串常用函数
  10. 怪异的万圣节:图标素材,给对生活有仪式感的设计师!
  11. 陈国良院士将出席“首届对象存储技术与应用大会”
  12. 分布式系统中协调和复制技术的原理
  13. java正则表达式 用户名_java之正则表达式
  14. 网络通信原理之TCP,UDP,QUIC
  15. 分页的时候pageSize没有效果
  16. android 侧滑栏教程,Android控件开发——DrawerLayout侧滑菜单的实现
  17. c++打印预览英文问题
  18. input type=button与asp:button的区别,以及runat=server的作用
  19. Node如何处理模块之间的关系
  20. 五大手机测试鸿蒙,厉害了!鸿蒙系统完成100万部手机测试,兼容多个国产品牌手机!...

热门文章

  1. 岳不群认识独孤九剑吗?
  2. 用一报还一报(TIT FOR TAT)策略的胜利指导我们的生活和人际交往
  3. SX1278调试记录
  4. 阿里巴巴达摩院视觉AI平台概述
  5. Unity3D教学 开发简单版第一人称射击游戏 可以多人联机(附源码)
  6. 如何设置普通网页的微信分享图标
  7. oracle 12c id 自增,Oracle 12c Identity Columns 新特性 和 序列 构成自增列
  8. CF407C Curious Array
  9. 网易数帆王佰平:我的 Envoy Maintainer 之路
  10. 网络安全应急响应有哪些相关知识?