用android api创建新的同步日历

前端之家收集整理的这篇文章主要介绍了用android api创建新的同步日历前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在我的帐户上创建一个日历,以填补我从某些网站获得的活动.我已经搜索并发现一些新的 android 4.0日历示例,我已经修改,以获得我需要的.问题是创建日历,填充事件但不与Google日历同步,因此在下一次同步时,它将被删除.我使用的功能是:

如果不存在,这是添加新日历的那个:

  1. public static Uri createCalendarWithName(Context ctx,String name,String accountName) {
  2.  
  3. Uri target = Uri.parse(CalendarContract.Calendars.CONTENT_URI.toString());
  4. target = target.buildUpon().appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER,"true")
  5. .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME,accountName)
  6. .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE,"com.google").build();
  7.  
  8. ContentValues values = new ContentValues();
  9. values.put(Calendars.ACCOUNT_NAME,accountName);
  10. values.put(Calendars.ACCOUNT_TYPE,"com.google");
  11. values.put(Calendars.NAME,name);
  12. values.put(Calendars.CALENDAR_DISPLAY_NAME,name);
  13. values.put(Calendars.CALENDAR_COLOR,0x00FF00);
  14. values.put(Calendars.CALENDAR_ACCESS_LEVEL,CalendarContract.Calendars.CAL_ACCESS_ROOT);
  15. values.put(Calendars.OWNER_ACCOUNT,accountName);
  16. values.put(Calendars.VISIBLE,1);
  17. values.put(Calendars.SYNC_EVENTS,1);
  18. values.put(Calendars.CALENDAR_TIME_ZONE,"Europe/Rome");
  19. values.put(Calendars.CAN_PARTIALLY_UPDATE,1);
  20. values.put(Calendars.CAL_SYNC1,"https://www.google.com/calendar/Feeds/" + accountName + "/private/full");
  21. values.put(Calendars.CAL_SYNC2,"https://www.google.com/calendar/Feeds/default/allcalendars/full/" + accountName);
  22. values.put(Calendars.CAL_SYNC3,"https://www.google.com/calendar/Feeds/default/allcalendars/full/" + accountName);
  23. values.put(Calendars.CAL_SYNC4,1);
  24. values.put(Calendars.CAL_SYNC5,0);
  25. values.put(Calendars.CAL_SYNC8,System.currentTimeMillis());
  26.  
  27. Uri newCalendar = ctx.getContentResolver().insert(target,values);
  28.  
  29. return newCalendar;
  30. }

并且创建新事件而不进行交互:

  1. public static Uri createEventWithName(Context ctx,long id,String data) {
  2. long startMillis = 0;
  3. long endMillis = 0;
  4. int id2=(int)id;
  5. String[] divisi = data.split("/");
  6. Calendar beginTime = Calendar.getInstance();
  7. beginTime.set(2012,Integer.parseInt(divisi[0])-1,Integer.parseInt(divisi[1]));
  8. startMillis = beginTime.getTimeInMillis();
  9. Calendar endTime = Calendar.getInstance();
  10. endTime.set(2012,Integer.parseInt(divisi[1]));
  11. endMillis = endTime.getTimeInMillis();
  12.  
  13.  
  14. ContentValues cv = new ContentValues();
  15. cv.put(Events.TITLE,name);
  16. cv.put(Events.DTSTART,startMillis);
  17. cv.put(Events.DTEND,endMillis);
  18. cv.put(Events.CALENDAR_ID,id2);
  19. Log.d("aggiungo a calendario",Integer.toString(id2));
  20. cv.put(Events.EVENT_TIMEZONE,TimeZone.getDefault().toString());
  21. //cv.put(Events.RRULE,"FREQ=DAILY;INTERVAL=2");
  22.  
  23. Uri newEvent = ctx.getContentResolver().insert(CalendarContract.Events.CONTENT_URI,cv);
  24. return newEvent;
  25. }

我没有在Android编程中经验丰富,所以我认为这是一个愚蠢的问题=)我已经看到accountName和帐户类型必须与存储在Android设备上的相同,否则事件被取消.我从android api获取accountName,我认为它们是正确的.帐户类型似乎适用于其他….

感谢任何人帮助我!

解决方法

现在不可能

经过很多谷歌搜索,我无法找到一种在Gmail帐户(帐户类型“com.google”)中创建新的可同步日历的方法.我试过这些情况:
1.没有SyncAdapter,我得到相同的行为 – 日历出现在外部Google日历应用程序,所有事件我添加,但不久之后(例如,几秒钟后)所有事件和日历都消失.
2.与SyncAdapter和com.google验证器 – 我在该过程中收到错误
3.使用SyncAdapter和com.example身份验证器 – 可以在Gmail帐户中创建日历

请注意,您可以创建新帐户并为该帐户创建新的日历(使用SyncAdapter,方案3),但它不是Gmail帐户,因此日历不能与Gmail日历同步(例如,如果您在网络浏览器中登录Gmail帐户并打开Goog​​le日历刚创建的日历不会显示).

猜你在找的Android相关文章