android 系统提醒功能,Android 向系统日历中添加提醒(踩坑)
代码:
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 向系统日历中添加提醒(踩坑)相关推荐
- 如何发布日历提醒推送消息服务器,iOS开发 -- 通过app向手机自带的日历中添加事件提醒...
在如今实际开发中,我们会有一种需求---通过自己的app往系统自带的日历中添加提醒事件. 一: 首先上最后效果图: WechatIMG7.jpeg 下图是关于添加事件的详情 WechatIMG8.jp ...
- 如何在App中实现朋友圈功能之四在朋友圈中添加发送图片功能——箭扣科技Arrownock
如何在App中实现朋友圈功能 之四 在朋友圈中添加发送图片功能 实现概念: 当用户在界面点击发送按钮的时候,如果已经有选择好的图片,我们的做法是先上传图片到服务器,再将图片Id作为Post的属性上传. ...
- android 添加日程失败,Android向系统日历中添加日程事件
总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...
- Android向系统日历中添加日程事件
总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...
- Android 在系统日历中添加日程
在项目开发过程中,有时会有预约提醒.定时提醒等需求,这时我们可以使用系统日历来辅助提醒.通过向系统日历中写入事件.设置提醒方式(闹钟),实现到达某个特定的时间自动提醒的功能.这样做的好处是由于提醒功能 ...
- android系统应用功能,Android系统应用(12)
如何成为系统应用 方法一:在Manifest中声明android:sharedUserId的值为:android.uid.system,android.uid.phone,android.uid.lo ...
- 【安卓开发 】Android初级开发(十二)Android向系统日历中添加事件
1.首先需要获取权限 <uses-permission android:name="android.permission.READ_CALENDAR" /><us ...
- android开启照相功能,Android打开系统相机并拍照的2种显示方法
本文实例为大家分享了Android打开系统相机并拍照的具体实现代码,供大家参考,具体内容如下 目标效果: 第二张为点击第一个按钮拍照后显示的,比较模糊,第三章为点击第二个按钮拍照后显示的,比较清楚. ...
- android 选择答题功能,Android实现简单的答题系统
本文实例为大家分享了Android实现答题系统的具体代码,供大家参考,具体内容如下 Question: package com.example.lenovo.exam; /** * Created b ...
- android 本地提醒功能,android中的本地定时推送到通知栏
一.使用系统定义的Notification 以下是使用示例代码: import android.app.Notification; import android.app.NotificationMan ...
最新文章
- 50岁马斯克又恋爱了!27岁金发女友长着芭比娃娃脸
- Linux预备知识(一):进程隔离
- aopaspect区别_面试官:什么是AOP?Spring AOP和AspectJ的区别是什么?
- 在Chrome插件上获取当前插件的版本号
- CSP2019洛谷P5666:树的重心
- linux gpt引导分区,linux 引导gpt分区windows及clover
- Linux查看主板的相关信息
- 华为2018春招笔试题目 字节流解析与长整数相乘
- php--字符串常用函数
- 怪异的万圣节:图标素材,给对生活有仪式感的设计师!
- 陈国良院士将出席“首届对象存储技术与应用大会”
- 分布式系统中协调和复制技术的原理
- java正则表达式 用户名_java之正则表达式
- 网络通信原理之TCP,UDP,QUIC
- 分页的时候pageSize没有效果
- android 侧滑栏教程,Android控件开发——DrawerLayout侧滑菜单的实现
- c++打印预览英文问题
- input type=button与asp:button的区别,以及runat=server的作用
- Node如何处理模块之间的关系
- 五大手机测试鸿蒙,厉害了!鸿蒙系统完成100万部手机测试,兼容多个国产品牌手机!...