我正在尝试从我的代码更新手机上的日历事件,但context.getContentResolver()。update保持返回0,当然我在日历中查看时没有对事件进行任何更改应用程序。
我正在使用context.getContentResolver()。查询获取事件ID,开始时间等,并且我得到了像431,4,233等的唯一数字,所以我假设事件ID我'使用是真实的。
我理解这样做的官方方法是通过Google的服务器而不是使用update(),但对于我的实现,这样做是没有意义的(或者甚至一般情况下,但我离题了)。
我做错了什么,或者我试图做一些Android根本不允许的事情?
Uri updateEventUri = ContentUris.withAppendedId(Uri.parse("content://com.android.calendar/events"), id);
ContentValues cv = new ContentValues();
begin.set(Calendar.HOUR_OF_DAY, arg0.getCurrentHour()); //begin is a java.util.Calendar object
begin.set(Calendar.MINUTE, arg0.getCurrentMinute());
//cv.put("_id", id);
//cv.put("title", "yeahyeahyeah!");
cv.put("dtstart", begin.getTimeInMillis());
int updatedrowcount = context.getContentResolver().update(updateEventUri, cv, null, null);
System.out.println("updated "+updatedrowcount+" rows with id "+id);
此处发布了相关问题,但没有回复https://stackoverflow.com/questions/5636350/update-android-calendar-event
如果我能澄清任何事情,请告诉我。我真的很感激你们和玩偶可以提供的任何输入!
答案 0 :(得分:3)
我已经尝试了很多,最后得到了解决方案(虽然不可靠)..但工作正常..
public static boolean updateCalendar(Context context,String cal_Id,String eventId)
{
try{
Uri CALENDAR_URI = Uri.parse(CAL_URI+"events");
Cursor c = context.getContentResolver().query(CALENDAR_URI, null, null, null, null);
String[] s = c.getColumnNames();
if (c.moveToFirst())
{
while (c.moveToNext())
{
String _id = c.getString(c.getColumnIndex("_id"));
String CalId = c.getString(c.getColumnIndex("calendar_id"));
if ((_id==null) && (CalId == null))
{
return false;
}
else
{
if (_id.equals(eventId) && CalId.equals(cal_Id))
{
Uri uri = ContentUris.withAppendedId(CALENDAR_URI, Integer.parseInt(_id));
context.getContentResolver().update(uri, null, null, null);// need to give your data here
return true;
}
}
}
}
}
finally
{
return true;
}
}
最后我不确定它是否适用于所有设备。
答案 1 :(得分:2)
好吧,问题是我在获取事件和编辑事件之间使用了不同的URI。我使用了来自here的代码示例,并使用URI“content://com.android.calendar/instances/when”来获取事件并在屏幕上显示它们。当我进行更改时,我使用“content://com.android.calendar/events”按ID进行编辑,如上例所示。
我发现,感谢您的回复,ntc,两个URI之间事件的ID是不同的,因此我无法使用每个给出的信息一致地编辑事件。我假设我得到的事件ID是系统ID并且通用于手机。
我想我必须做一些测试,看看哪种硬件与这种方法不兼容。我正在使用HTC Evo进行测试,到目前为止一直很好。
答案 2 :(得分:0)
查询Instances
表时,使用Instances.EVENT_ID
获取您要修改的事件的标识符,而不是Instances._ID
。