2012-01-18 10 views
11

Android takvimine bir etkinlik eklemeye çalışıyorum ve Google Takvim ile otomatik olarak senkronize etmek için etkinliğin gmail takvimine ekleneceğini belirtiyorum. Sorun, programlı olarak Google takvimiyle senkronize edilmeyen etkinliklerdir. Ancak, el kitabını telefona eklerseniz Google takvimiyle senkronize edilir. Nedenini bilmiyorum. Senkronizasyon etkinliği Android'de google takvimiyle programatik olarak eklendi

Bu

Ben olay eklemek için kullanın koddur: Yani

ArrayList<MyCalendar> calendars = new ArrayList<MyCalendar>(); 

String[] projection = new String[] { "_id", "name" }; 
Uri calUri = getCalendarURI(false); 
Cursor managedCursor = managedQuery(calUri, projection, "selected=1", 
     null, null); 

String calName = null; 
String calId = null; 
if (managedCursor.moveToFirst()) { 

    int nameColumn = managedCursor.getColumnIndex("name"); 
    int idColumn = managedCursor.getColumnIndex("_id"); 
    do { 
     calName = managedCursor.getString(nameColumn); 
     calId = managedCursor.getString(idColumn); 
     calendars.add(new MyCalendar(Integer.parseInt(calId), calName)); 
    } while (managedCursor.moveToNext()); 

} 
Toast.makeText(getBaseContext(), calName + " " + calId, 
     Toast.LENGTH_LONG).show(); 

Calendar cal = Calendar.getInstance(); 
ContentValues event = new ContentValues(); 
event.put("calendar_id", 2); 
event.put("title", "Test Event2"); 
event.put("description", "Hiii Buddy"); 
long startTime = cal.getTimeInMillis(); 
long endTime = cal.getTimeInMillis() + 60 * 60 * 1000; 
event.put("dtstart", startTime); 
event.put("dtend", endTime); 
event.put("allDay", 0); 
event.put("eventStatus", 1);// tentative 0, confirmed 1 canceled 2 
event.put("visibility", 3);// default 0 confidential 1 private 2 
          // public 3 
event.put("transparency", 0);// opaque 0 transparent 1 
event.put("hasAlarm", 1); // 0 false, 1 true 

Uri eventsUri = getCalendarURI(true); 
Uri url = getContentResolver().insert(eventsUri, event); 

etkinliği başarıyla Takvime eklendi ama web adresinden Google takviminde görünmüyor (senkronize etme) ancak olayı el ile eklerseniz senkronizasyon yapar!

+0

. Sorunu çözdün mü ??? – asish

+2

Henüz bir çözümünüz var mı? – mvieghofer

cevap

2

google takvim olarak hem android takvimine bir etkinlik eklemek için bu kodu deneyin:

ContentValues values = new ContentValues(); 

    cal_id = String.valueOf(p1); 
    values.put("calendar_id", p1); 
    values.put("title", title1); 
    values.put("allDay", 0); 
    values.put("dtstart", settime); 
    values.put("dtend", cal.getTimeInMillis()+60*60*1000); 
    values.put("description", desc1); 
    values.put("visibility", 0); 
    values.put("transparency", 0); 
    values.put("hasAttendeeData", 1); 
    values.put("hasAlarm", 0); 
    event = cr.insert(EVENTS_URI, values); 
    event1=event; 
    dat1 = event.toString(); 
    long id=-1; 
    if (event != null) 
    { 
     id = Long.parseLong(event.getLastPathSegment()); 
     ContentValues values1 = new ContentValues(); 
     values1.put("event_id", id); 
     values1.put("method", 1); //METHOD_ALERT 

     Uri reminder = Uri.parse(getCalendarUriBase(this) + "reminders"); 
     this.getContentResolver().insert(reminder, values1); 
     if(s.length() > 0 || partmail.length() > 0) 
     { 
    //REQUIRES FOLLOWING CODE 

Bu kod google takvime

   ContentValues attendees = new ContentValues(); 
      attendees.put("event_id", id); 
      attendees.put("attendeeEmail", partmail1); 
      attendees.put("attendeeRelationship", 2);//RELATIONSHIP_ATTENDEE 
      attendees.put("attendeeStatus", 3); //ATTENDEE_STATUS_INVITED  
      attendees.put("attendeeType", 1); //TYPE_REQUIRED 

      id1=(int)id; 
      alarmid = (int) id; 
      Uri attendeesUri = null; 
      if (Integer.parseInt(Build.VERSION.SDK) >= 8) 
      { 
        attendeesUri = Uri.parse("content://com.android.calendar/attendees"); 
      } 
      else if(Integer.parseInt(Build.VERSION.SDK) < 8) 
      { 
        attendeesUri = Uri.parse("content://calendar/attendees"); 
      } 
      this.getContentResolver().insert(attendeesUri, attendees); 

      Toast.makeText(this, "Task Scheduled Successfully", Toast.LENGTH_SHORT).show(); 
     } 
     else 
     { 
      Toast.makeText(this, "Could not create Task!", Toast.LENGTH_SHORT);    
     } 


    // reminder insert 
    Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(this) + "reminders"); 
    values = new ContentValues(); 
    values.put("event_id", id); 
    values.put("method", 1); 
    values.put("minutes", 0); 
    cr.insert(REMINDERS_URI, values); 

için sync'ed olay eklemek için kullanılır 8'den büyük, 8'den büyük ve 11'den büyük olan API düzeyleri için farklı olduğundan, Takvim'in URI'sini alın.

}

+0

sorunu, etkinlik eklenerek değil. Etkinlik, yerel takvime eklendi ve google takvimine etkinlik olarak gösterildi, Ancak Google takviminde değil. – asish

+0

@ashish: Güncellenmiş cevabımı kontrol et –

+1

hala çalışmıyor .. – asish

1

kullanımı hakkında perdah API Android resmi API sağlamaz here

yukarıdaki referans biraz genel sağlanmaktadır. Yani, başka bir çözüm daha android belirli bir çalışma örneği içeren An Android Tutorial–Programming with Calendar

olduğunu. Ayrıca, WRITE_CALENDAR

READ_CALENDAR gibi İzni Bildirgesi de dikkatli olun bu işlev tarafından eklemeden sonra olay senkronize edebilirsiniz
3

, O (daha sonra API 8'de ve) benim için çalıştı: Ben aynı sorun var @

public static void syncCalendar(Context context, String calendarId) { 
     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(getCalendarUri(), 
         Long.parseLong(calendarId)), values, null, null); 
    } 
İlgili konular