Не удается обновить событие в календаре телефона из кода
Я пытаюсь обновить событие календаря на моем телефоне из моего кода, но контекст.getContentResolver().обновление продолжает возвращать 0, и, конечно, нет никаких изменений в событии, когда я смотрю на него в приложении календаря.
Я получаю идентификатор события, время начала и т. д. При условиях.getContentResolver().запрос, и я получаю уникальные номера, такие как 431, 4, 233 и т. д., Поэтому я предполагаю, что идентификаторы событий, которые я использую, реальны.
Я понимаю официальный способ сделать это это пройти через серверы 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
Дайте мне знать, если я могу уточнить что угодно; я был бы очень признателен за любой вклад, который вы, ребята, и куклы могли бы предоставить!
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;
}
}
и, наконец, я не уверен, если это работает с каждым устройством.
ОК, Итак, проблема заключалась в том, что я использовал разные URI между выборкой событий и их редактированием. Я использовал образец кода из здесь и использовал URI " content: / / com.андроид.календарь / экземпляры / когда", чтобы получить события и отобразить их на экране. Когда я внес изменения, я использовал " content: / / com.андроид.календарь/события" для редактирования по ID как в моем примере выше.
что я нашел, благодаря вашему ответу, ntc, было то, что идентификаторы для событий между два Ури были разными, и поэтому я не мог редактировать события в соответствии с информацией, которую каждый из них давал мне. Я предполагал, что идентификаторы событий, которые я получал, были системными идентификаторами и универсальными для телефона.
Я думаю, мне придется провести некоторое тестирование и посмотреть, какое оборудование несовместимо с этим методом. Я использую HTC Evo для тестирования и до сих пор так хорошо.
при опросе Instances
таблицы Instances.EVENT_ID
чтобы получить идентификатор события, которое вы хотите изменить, вместо Instances._ID
.