使用Android API创建新的同步日历 [英] Create new synced calendar with android api

查看:103
本文介绍了使用Android API创建新的同步日历的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的帐户上创建一个日历,以填充从某些网站获得的活动。我搜索并发现一些新的Android 4.0日历示例,我已经修改,以获得我需要的。问题是,日历被创建,充满事件,但没有与谷歌日历同步,所以在下一次同步它被擦除。我使用的功能是这些:

i'm trying to create a calendar on my account to fill with events that i get from some websites. I've searched and found some new android 4.0 calendar example that i've modified to obtain what i need. The problem is that the calendar is created, filled with events but not synced with google calendar, so in the next sync it is erased. The funcion i use are these:

这是一个用于添加新日历如果不存在的话:

This is the one for add the new calendar if don't alreay exist:

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;
    }

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

and that one create the new event without interaction:

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和帐户类型必须是一样存储在Android设备上,否则事件被取消。我得到accountName从android api和我认为他们是正确的。帐户类型似乎适用于其他....

I'm not so experienced in Android programming so i think it's a stupid question =) i've read that accountName and Account Type must be the same that the one stored on android device, else the event is cancelled. I get accountName from android api and i think they are correct. The account type seems to work for other....

感谢任何帮助我的人。

推荐答案

我面对的同样的问题。在进行以下更改后,我将看到事件永久停留在我的日历上。

Same issue i was facing. After making the below change now i am seeing the events permanently sticking to my calendar.

addEvent 下面一行

Uri uri =  getContentResolver().insert(asSyncAdapter(Events.CONTENT_URI,"abc@gmail.com","com.gmail"), cv);

asSyncAdapter的代码如下

Code for asSyncAdapter is as below

 static Uri asSyncAdapter(Uri uri, String account, String accountType) {
        return uri.buildUpon()
            .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
            .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
            .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
     }

这篇关于使用Android API创建新的同步日历的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆