2017-06-02 132 views
0

我试图以编程方式更新日历事件,但我遇到了一些问题。更新Android日历事件

我使用的是来自谷歌Android文档更新代码:https://developer.android.com/guide/topics/providers/calendar-provider.html#update-event

因此,这里是我的代码:

ContentValues values = new ContentValues(); 
     Uri updateUri = null; 
     // New end for event 
     values.put(CalendarContract.Events.DTEND, endMillis); 
     updateUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID); 
     int rows = c.getContentResolver().update(updateUri, values, null, null); 
     Log.i("DEBUG_TAG", "Rows updated: " + rows); 

但行变量总是返回0,除了当我进入应用程序设置,删除日历存储,添加新的日历和新的事件,然后当我尝试更新它时,它只能运行一次。如果我尝试添加另一个事件并在之后进行更新,那么行将再次返回0。

有什么想法?

感谢

请注意,我的应用程序是最小API级别17(上它不工作),但我想在API级别25和它的作品,所以你有什么想法如何支持添加到我以前的Android版本的代码?我还发现,经过一些测试后,它可以从API级别21开始工作。在下面,它不会。

编辑: 我找到了一个解决方案,查看下面的答案。

+0

为什么我不能在我的帖子的开头添加“你好”?当我添加它时,它会自动删除。这很好笑。 – greg

回答

0

这里是为我工作的解决方案:

,我使用的是与CalendarContract.Events._ID列查询的结果,但我不得不使用CalendarContract.Instances.EVENT_ID提供的ID事件ID。 事实上,如果我创建一个新事件(第一个),它具有_id = 1和event_id = 1,如果我从Android日历应用程序中删除它,并用我的应用程序创建一个新事件,它也有_id = 1,但event_id = 2. 因此,如果我使用_id而不是event_id与withAppendedID(),更新查询失败。