我正在尝试在我的帐户上创建一个日历,以填充我从某些网站获得的事件。我搜索并找到了一些新的android 4.0日历示例,我已对其进行了修改以获取所需的内容。问题在于创建的日历中充满了事件,但未与Google日历同步,因此在下一次同步中将其删除。我使用的功能是:

如果不存在,这是添加新日历的方法:

public static Uri createCalendarWithName(Context ctx, String name,String accountName) {

            Uri target = Uri.parse(CalendarContract.Calendars.CONTENT_URI.toString());
            target = target.buildUpon().appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
            .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, accountName)
            .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, "com.google").build();

            ContentValues values = new ContentValues();
            values.put(Calendars.ACCOUNT_NAME, accountName);
            values.put(Calendars.ACCOUNT_TYPE, "com.google");
            values.put(Calendars.NAME, name);
            values.put(Calendars.CALENDAR_DISPLAY_NAME, name);
            values.put(Calendars.CALENDAR_COLOR, 0x00FF00);
            values.put(Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_ROOT);
            values.put(Calendars.OWNER_ACCOUNT, accountName);
            values.put(Calendars.VISIBLE, 1);
            values.put(Calendars.SYNC_EVENTS, 1);
            values.put(Calendars.CALENDAR_TIME_ZONE, "Europe/Rome");
            values.put(Calendars.CAN_PARTIALLY_UPDATE, 1);
            values.put(Calendars.CAL_SYNC1, "https://www.google.com/calendar/feeds/" + accountName + "/private/full");
            values.put(Calendars.CAL_SYNC2, "https://www.google.com/calendar/feeds/default/allcalendars/full/" + accountName);
            values.put(Calendars.CAL_SYNC3, "https://www.google.com/calendar/feeds/default/allcalendars/full/" + accountName);
            values.put(Calendars.CAL_SYNC4, 1);
            values.put(Calendars.CAL_SYNC5, 0);
            values.put(Calendars.CAL_SYNC8, System.currentTimeMillis());

            Uri newCalendar = ctx.getContentResolver().insert(target, values);

            return newCalendar;
    }

然后创建一个无需交互的新事件:
public static Uri createEventWithName(Context ctx, long id, String name, String data) {
        long startMillis = 0;
        long endMillis = 0;
        int id2=(int)id;
        String[] divisi = data.split("/");
        Calendar beginTime = Calendar.getInstance();
        beginTime.set(2012,Integer.parseInt(divisi[0])-1, Integer.parseInt(divisi[1]));
        startMillis = beginTime.getTimeInMillis();
        Calendar endTime = Calendar.getInstance();
        endTime.set(2012,Integer.parseInt(divisi[0])-1, Integer.parseInt(divisi[1]));
        endMillis = endTime.getTimeInMillis();


        ContentValues cv = new ContentValues();
        cv.put(Events.TITLE, name);
        cv.put(Events.DTSTART, startMillis);
        cv.put(Events.DTEND, endMillis);
        cv.put(Events.CALENDAR_ID, id2);
        Log.d("aggiungo a calendario",Integer.toString(id2));
        cv.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().toString());
        //cv.put(Events.RRULE, "FREQ=DAILY;INTERVAL=2");

        Uri newEvent = ctx.getContentResolver().insert(CalendarContract.Events.CONTENT_URI, cv);
        return newEvent;
}

我对Android编程不太熟悉,所以我认为这是一个愚蠢的问题=)我已阅读到accountName和Account Type必须与存储在android设备上的那个相同,否则该事件将被取消。我从android api获取accountName,我认为它们是正确的。该帐户类型似乎适用于其他...。

感谢任何帮助我的人!

最佳答案

目前无法执行。

经过大量的谷歌搜索之后,我找不到在Gmail帐户(帐户类型为“com.google”)中创建新的可同步日历的方法。我已经尝试过以下情形:
1.在没有SyncAdapter的情况下,我的行为相同-日历显示在外部Google日历应用中,其中包含我添加的所有事件,但不久(例如几秒钟后)所有事件和日历都消失了。
2.使用SyncAdapter和com.google身份验证器-在此过程中出现错误
3.使用SyncAdapter和com.example身份验证器-可以创建日历,但不能在Gmail帐户中创建

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

关于android - 使用Android API创建新的同步日历,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12458838/

10-14 19:26