2012-08-12 9 views
9

Provo ad aggiungere un calendario con il seguente codice. L'evento creato può essere letto dalle app del calendario sul mio telefono, ma è sufficiente la sincronizzazione con Google Calendar online. Qualcuno può darmi qualche colpo per risolvere il problema?Evento di calendario salvato localmente sul telefono, ma non può essere sincronizzato con Google Calendar

ecco alcuni un'osservazione 1. codice è stato eseguito sul mio telefono reale (Galaxy Nexus 4.1.1) 2. Tutti gli altri eventi del calendario può sincronizzare Google Calendar, solo il programma aggiunto non può essere sincronizzato.

--- --- aggiornamento

Quando cambio il codice follow

values.put(CalendarContract.Events.SYNC_EVENTS,1); 
values.put(CalendarContract.Events.VISIBLE, 1); 

- ottengo l'errore

java.lang.IllegalArgumentException: Only the provider may write to sync_events 

public void addEvent() { 

    long startMillis = 0; 
    long endMillis = 0; 

    Log.v("LOG", "entered addEvent"); 


    //Calendar beginTime = Calendar.getInstance(); 
    //beginTime.set(2012, 8, 11, 22, 0); 
    //startMillis = beginTime.getTimeInMillis(); 
    startMillis = System.currentTimeMillis() + (3600 * 1000)*4; 

    //Calendar endTime = Calendar.getInstance(); 
    //endTime.set(2012, 8, 11, 23, 0); 
    //endMillis = endTime.getTimeInMillis(); 
    endMillis = System.currentTimeMillis() + (3600 * 1000)*5; 

    ContentResolver cr = getContentResolver(); 
    ContentValues values = new ContentValues(); 

    values.put(CalendarContract.Events.DTSTART, startMillis); 
    values.put(CalendarContract.Events.DTEND, endMillis); 
    values.put(CalendarContract.Events.TITLE, "Dog"); 
    values.put(CalendarContract.Events.DESCRIPTION, "DogInDESCRIPTION"); 
    values.put(CalendarContract.Events.CALENDAR_ID, 1); 
    values.put(CalendarContract.Events.EVENT_TIMEZONE, "eventTimezone"); 

    values.put(CalendarContract.Events.SYNC_EVENTS,0);  


    cr.insert(CalendarContract.Events.CONTENT_URI, values); 
} 
+0

Sei riuscito a risolvere il problema. – AndroidDev

risposta

3

non dovreste impostare CalendarContract.Events.SYNC_EVENTS su CalendarContract.Events.CONTENT_URI.

Se il calendario è già configurato come visibile e sincronizzato sul dispositivo, è sufficiente aggiungere un evento e verrà sincronizzato.

Se è necessario attivare la sincronizzazione dall'app, è possibile impostare CalendarContract.Events.SYNC_EVENTS su CalendarContract.Calendars.CONTENT_URI.

Ad esempio (calId è l'ID del calendario che si desidera aggiornare per essere visibile e sincronizzare).

ContentResolver cr = context.getContentResolver(); 
ContentValues values = new ContentValues(); 
values.put(CalendarContract.Calendars.SYNC_EVENTS, 1); 
values.put(CalendarContract.Calendars.VISIBLE, 1); 

cr.update(ContentUris.withAppendedId(Calendars.CONTENT_URI, calId), values, null, null);