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);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值