2014-07-21 10 views
5

Właśnie uczę się obsługi Kalendarzy Android. Do tej pory mogę wyświetlać informacje o istniejących kalendarze. Mogę również tworzyć własne lokalne kalendarze - kod testowy jak:Dostawca kalendarza Androida: Jak mogę usunąć własne kalendarze lokalne?

private void createCalendarTest() 
{ 
    Uri.Builder builder = Calendars.CONTENT_URI.buildUpon(); 
    builder.appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
      .appendQueryParameter(Calendars.ACCOUNT_NAME, "private") 
      .appendQueryParameter(Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL); 

    Uri uri = builder.build(); 

    ContentValues values = new ContentValues(); 
    values.put(Calendars.NAME, "TEST"); 
    values.put(Calendars.CALENDAR_DISPLAY_NAME, "Calendar named TEST"); 
    values.put(Calendars.SYNC_EVENTS, false); 
    values.put(Calendars.VISIBLE, true); 

    getContentResolver().insert(uri, values); 
} 

Właściwie mogę utworzyć wiele kalendarzy, które różnią się tylko w _ID. Czytałem gdzie indziej, że mogę utworzyć kalendarz tylko przy użyciu adaptera synchronizacji. Jak mogę usunąć kalendarz? Oczekuję, że identyfikator URI musi również zawierać informacje o adapterze synchronizacji i _ID usuniętego kalendarza. Wypróbowałem poniższy kod, ale nie udało się:

private void deleteCalendarTest() 
{ 
    Uri.Builder builder = Calendars.CONTENT_URI.buildUpon(); 
    builder.appendPath("6") // here for testing; I know the calender has this ID 
      .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
      .appendQueryParameter(Calendars.ACCOUNT_NAME, "private") 
      .appendQueryParameter(Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL); 

    Uri uri = builder.build(); 

    getContentResolver().delete(uri, null, null); 
    Toast.makeText(this, "??? deleteCalendarTest() not working", Toast.LENGTH_SHORT).show(); 
} 

Jak mogę to naprawić?

+0

Czy znalazłeś jakieś rozwiązanie problemu? Jestem w tej samej sytuacji, co ty! –

+0

Nie, nie naprawiłem tego. Ta część projektu została zatrzymana i nie kontynuowałem poszukiwania rozwiązania. – pepr

+1

Znalazłem rozwiązanie i odpowiedziałem na pytanie ... może to pomoże komuś innemu! –

Odpowiedz

3

Po przeczytaniu z większą uwagą dokumentację, okazało się, należy dodać do zawartości wartości następujących pól też:

values.put(CalendarContract.Calendars.SYNC_EVENTS, 1); 
values.put(CalendarContract.Calendars.ACCOUNT_NAME, "private"); 
values.put(CalendarContract.Calendars.ACCOUNT_TYPE,CalendarContract.ACCOUNT_TYPE_LOCAL); 

Wtedy wszystko powinno być w porządku i powinien być w stanie usunąć wstawiony kalendarz ! ;)

+1

Dzięki za wysiłek. Nie mogę tego teraz sprawdzić; i tak ... – pepr

+0

Dodałem wszystkie te parametry, aby utworzyć kalendarz, ale nadal nie mogę usunąć lokalnego kalendarza, który tworzę programowo z aplikacji –

+0

Jeśli korzystasz z pól, o których wspomniałem przy tworzeniu kalendarza i dołączasz do identyfikatora UI ContentProvider, trzy parametry zapytania używane przez @pepr, nie powinieneś mieć problemów. Może coś jest nie tak w twoim kodzie. W każdym razie dokumentacja bardzo pomaga: http://developer.android.com/guide/topics/providers/calendar-provider.html –

Powiązane problemy