android 读写系统日历、插入事件、添加多个提醒的问题

最近在写APP读写系统日历,遇到不少坑,总结一下。

1.个别手机无法读写系统日历。

2.添加了日历账户,过不久会自动消失。

3.一个事件如何添加多个提醒。

下面一一解答:

1.个别手机无法读写系统日历:其他手机都可以读写系统日历,但红米NOTE无法读写,首先确认了读写日历的权限已经添加完成(高版本获取权限的方法自行百度)。本人也下载了很多其他日历相关的应用,在红米NOTE上都可以读写到系统日历,由此确认肯定是我代码问题。但是搜遍网上的资料,读写操作都是那几个步骤,我写的也没什么不一样的,怎么就执行不了呢?反复对比自己的应用和别人的应用有什么不同,发现别人都会先询问是否允许访问系统日历,需要显示天气信息的时候会询问定位权限。我的却只询问了是否允许访问位置。允许访问位置之后就直接进入了主页,而我的主页也是同时用到了定位和日历读写,却只询问了一种权限的授权。到设置的应用授权页面查看授权信息,果然我的应用没有开日历的读写权限!至此真相大白,手动开启之后读写日历正常。但怎么解决授权问题呢。放到两步操作中分开获取就好了!由于我们的没有操作,都是自动获取,所以本人把定位权限放到了启动页获取。

2.添加了日历账户,过不久会自动消失:

查看源码:

 /**
     * A special account type for calendars not associated with any account.
     * Normally calendars that do not match an account on the device will be
     * removed. Setting the account_type on a calendar to this will prevent it
     * from being wiped if it does not match an existing account.
     *
     * @see SyncColumns#ACCOUNT_TYPE
     */
    public static final String ACCOUNT_TYPE_LOCAL = "LOCAL";

注意注释部分,不懂的找百度翻译,

/**
*用于与任何帐户都不关联的日历的特殊帐户类型。

*通常情况下,与设备上的帐户不匹配的日历将

*远离的。将日历上的account_type设置为此将阻止它

*如果与现有帐户不匹配,则不会被删除。
*/

所以设置账户时账户类型设置为本地即可CalendarContract.ACCOUNT_TYPE_LOCAL

value.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);// 账户类型 


3.一个事件如何添加多个提醒:循环添加事件提醒:

网上的资料都是千篇一律的,给一个事件添加一个提醒,如下

ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(Reminders.MINUTES, 15);
values.put(Reminders.EVENT_ID, eventID);
values.put(Reminders.METHOD, Reminders.METHOD_ALERT);
Uri uri = cr.insert(Reminders.CONTENT_URI, values);


但是我这个人比较笨,不会举一反三,一直在找如何添加多个提醒呢??

注意到源码中说,下表列出了Reminders表的可写字段。当插入一个新的提醒时,必须包含所有这些字段。

一个提醒对应一个事件,一个事件对应多个提醒,以eventId相关联。那多插入几次不就完了吗,所以一个循环搞定,将minutes的值动态设置成自己需要提醒的时间就可以了。

参考:Android 日历CalendarProvider - 泡网

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值