Android添加新日历 [英] Android Adding a new Calendar

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

问题描述

我已检查过各种方法,以便在Android应用程式中建立新的日历。我看到的唯一方法是在最新的api版本中使用新的日历API,但是如果你使用 CalendarContract.ACCOUNT_TYPE_LOCAL 这似乎只有工作。它不会让您创建一个附加到用户Google帐户的日历,与 Google日历同步。它不会在 Google日历在在线日历列表中显示。

  values.put(CalendarContract.Calendars.ACCOUNT_TYPE,
CalendarContract.ACCOUNT_TYPE_LOCAL);

我已尝试使用帐户中的帐户类型,但这不起作用。它似乎没有产生任何错误,虽然。结果很好。

  values.put(CalendarContract.Calendars.ACCOUNT_TYPE,accountType); 

以下是使用 Calendar API添加新本地日历的完整代码 SYNCADAPTER (帐户类型已注释掉)。有没有人知道我想要做什么是可能的?

  AccountManager manager = AccountManager.get(context); 
Account [] accounts = manager.getAccountsByType(com.google);

String accountName =;
String accountType =;

(帐户帐户:accounts){
accountName = account.name;
accountType = account.type;
break;
}

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

values.put(CalendarContract.Calendars.ACCOUNT_NAME,accountName);
//values.put(CalendarContract.Calendars.ACCOUNT_TYPE,accountType);
values.put(CalendarContract.Calendars.ACCOUNT_TYPE,CalendarContract.ACCOUNT_TYPE_LOCAL);
values.put(CalendarContract.Calendars.NAME,DaysSince.CAL_NAME);
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,DaysSince.CAL_NAME);
values.put(CalendarContract.Calendars.SYNC_EVENTS,1);
values.put(CalendarContract.Calendars.VISIBLE,1);
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL,CalendarContract.Calendars.CAL_ACCESS_OWNER);
values.put(CalendarContract.Calendars.OWNER_ACCOUNT,accountName);
values.put(CalendarContract.Calendars.DIRTY,1);
values.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE,TimeZone.getDefault()。getID());

Uri calUri = CalendarContract.Calendars.CONTENT_URI;

calUri = calUri.build Upon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER,true)
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME,accountName)
。 appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE,accountType)
.build();

Uri result = cr.insert(calUri,values);


解决方案

但由于您想要创建与您的Google帐户相关联的日历,因此您需要使用Google日历API(没有找到单独的解决方案来使用Android日历提供程序)。请查看以下链接:





请务必检查其API Explorer。用于创建新日历的简单 HTTP REQUEST



POST https://www.googleapis.com/calendar/v3 / calendars?key = {YOUR_API_KEY}

  {
summary:新的Google日历
}

这是 RESPONSE

  {
kind:calendar#calendar,
etag:__________etag_val_________
id:______id_goes_here______@group.calendar.google.com,
summary:我的新Google日历
}



之后,您应该可以通过Google日历提供商的Android应用(同步后)管理此日历。


I've checked all over for ways to create a new calendar from within an Android app. The only way I've seen is using the new Calendar API in the latest api version, BUT this only seems to work if you use CalendarContract.ACCOUNT_TYPE_LOCAL. It won't let you create a Calendar attached to the users Google account, synchronized with Google Calendar. It doesn't appear in the calendar list online at Google Calendar.

values.put(CalendarContract.Calendars.ACCOUNT_TYPE, 
    CalendarContract.ACCOUNT_TYPE_LOCAL);

I've tried using the account type from the Account, but this does not work. It doesn't seem to produce any error though. The result comes back fine.

values.put(CalendarContract.Calendars.ACCOUNT_TYPE, accountType);

Here is the full code for adding a new local calendar using the Calendar API and SYNCADAPTER (account type commented out). Does anyone know if what I'm trying to do is even possible?

AccountManager manager = AccountManager.get(context);
Account[] accounts = manager.getAccountsByType("com.google");

String accountName = "";
String accountType = "";

for (Account account : accounts) {
    accountName = account.name;
    accountType = account.type;
    break;
}

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

values.put(CalendarContract.Calendars.ACCOUNT_NAME, accountName);
//values.put(CalendarContract.Calendars.ACCOUNT_TYPE, accountType);
values.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);
values.put(CalendarContract.Calendars.NAME, DaysSince.CAL_NAME);
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, DaysSince.CAL_NAME);
values.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
values.put(CalendarContract.Calendars.VISIBLE, 1);
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
values.put(CalendarContract.Calendars.OWNER_ACCOUNT, accountName);
values.put(CalendarContract.Calendars.DIRTY, 1);
values.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().getID());

Uri calUri = CalendarContract.Calendars.CONTENT_URI;

calUri = calUri.buildUpon()
        .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
        .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, accountName)
        .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType)
        .build();

Uri result = cr.insert(calUri, values);

解决方案

Yes you can do it. But since you want to create a calendar linked with your google account, you need Google Calendar API for this (didn't find a single solution for doing this with Android Calendar Provider). Check below links:

Be sure to check their API explorer. Simple HTTP REQUEST for creating new calendar:

POST https://www.googleapis.com/calendar/v3/calendars?key={YOUR_API_KEY}

{
 "summary": "My new google calendar"
}

And it's RESPONSE:

{
 "kind": "calendar#calendar",
 "etag": "__________etag_val_________",
 "id": "______id_goes_here______@group.calendar.google.com",
 "summary": "My new google calendar"
}

After that you should be able to manage this calendar from your Android app with Calendar Provider (after sync).

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

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