gpt4 book ai didi

android - 无法将 Android 日历事件(从我的应用创建)与 Google 日历同步

转载 作者:行者123 更新时间:2023-12-01 06:29:55 24 4
gpt4 key购买 nike

我的 Android Google 帐户在设置中启用了同步选项(对于日历/联系人等)。

当我从 native 日历应用程序添加新事件时,它会与网络 Google 日历同步。
当我以编程方式添加新事件时,虽然它出现在 native Android 日历应用程序中,但它永远不会与我帐户上的 Google 日历同步。

我在网上搜索了各种 fragment 并尝试了不同的东西,我的事件(从我的应用程序中插入)从未出现在 Google 日历中(只有本地电话日历)。

这就是我插入事件的方式:

 @Override
protected void onCreate(Bundle savedInstanceState) {

accountName = getAccount().name;
accountType = getAccount().type;

setCalendarVisiblityAndSync();
addEvent(); //add single test event (this one appears in local calendar)
}

private void setCalendarVisiblityAndSync(){
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
values.put(CalendarContract.Calendars.VISIBLE, 1);

Uri uri = asSyncAdapter(ContentUris.withAppendedId(Calendars.CONTENT_URI, 1),accountName, accountType);
cr.update(uri, values, null, null);

}

public long addEvent() {

DateTime dateFrom = new DateTime().withDayOfMonth(20).withHourOfDay(11);
DateTime dateTo = new DateTime().withDayOfMonth(20).withHourOfDay(12);

long startMillis = 0;
long endMillis = 0;

startMillis = dateFrom.getMillis();
endMillis = dateTo.getMillis();

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

values.put(Events.DTSTART, startMillis);
values.put(Events.DTEND, endMillis);

String title = "ANDROID EVENT FROM MY APP";
values.put(Events.TITLE, title);

String description = "ANDROID EVENT FROM MY APP DESCRIPTION";
values.put(Events.DESCRIPTION, description);

values.put(Events.CALENDAR_ID, 1);
values.put(Events.EVENT_TIMEZONE, dateFrom.getZone().toTimeZone().getDisplayName());

values.put(Events.HAS_ALARM, true);

Uri eventUri = asSyncAdapter(Events.CONTENT_URI,accountName,accountType);
Uri uri = cr.insert(eventUri, values);

// get the event ID that is the last element in the Uri
long eventID = Long.parseLong(uri.getLastPathSegment());

return eventID;
}

public Account getAccount() {
Account[] accounts = AccountManager.get(this).getAccounts();
Account account = accounts[0];

return account;

}



//The static function below is a snippet of code I found as a suggestion on another thread (but I am not sure if I am using it right ?!)
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();
}

上面的函数来自不同的线程,我自己将它们组合起来,试图与谷歌日历成功同步,但它不起作用。

编辑:我也在日志窗口中收到此消息:
  /*05-02 10:40:16.670: W/EventHandler(29147):        com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
05-02 10:40:16.670: W/EventHandler(29147): {
05-02 10:40:16.670: W/EventHandler(29147): "errors": [
05-02 10:40:16.670: W/EventHandler(29147): {
05-02 10:40:16.670: W/EventHandler(29147): "reason": "invalid",
05-02 10:40:16.670: W/EventHandler(29147): "domain": "global",

05-02 10:40:16.670:W/EventHandler(29147):“消息”:“开始时间的时区定义无效。” */

最佳答案

问题可能出在“dateFrom.getZone().toTimeZone().getDisplayName()”中。
它返回的是时区的本地化名称,例如“太平洋标准时间”。您可以向用户显示此类字符串版本,但服务器可能需要时区 ID。尝试使用 dateFrom.getZone().getID()。

关于android - 无法将 Android 日历事件(从我的应用创建)与 Google 日历同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com