Google日历中添加的事件无法显示在Android Pie中吗?

时间:2019-05-14 11:36:47

标签: android google-calendar-api

我想以编程方式在Google日历中添加事件,并且我有以下代码在日历中添加事件:

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

            String calendarId = getGmailCalendarId(mContext);

            values.put(CalendarContract.Events.DTSTART, startMillis);
            values.put(CalendarContract.Events.DTEND, endMillis);
            values.put(CalendarContract.Events.TITLE, title);
            //values.put(CalendarContract.Events.DESCRIPTION, description);
            values.put(CalendarContract.Events.EVENT_LOCATION, location);
            values.put(CalendarContract.Events.HAS_ALARM, false);
            values.put(CalendarContract.Events.CALENDAR_ID, calendarId);
            values.put(CalendarContract.Events.EVENT_TIMEZONE, Calendar.getInstance()
                    .getTimeZone().getID());

            System.out.println(Calendar.getInstance().getTimeZone().getID());

//            Uri uri;
//            if (Integer.parseInt(Build.VERSION.SDK) >= 8)
//                uri = cr.insert(Uri.parse("content://com.android.calendar/events"), values);
//            else
//                uri = cr.insert(Uri.parse("content://calendar/events"), values);

            Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
            long eventId = java.lang.Long.parseLong(((Uri) uri).getLastPathSegment());
            Log.d("Event_Id", eventId + "");
            syncCalendar(mContext, calendarId);

        } catch (Exception e) {
            e.printStackTrace();
        }

我使用此方法获得了正确的gmail ID,该方法返回了calendarId。

getGmailCalendarId()

public String getGmailCalendarId(Context c) {
        String calenderId = "";
        String[] projection = new String[]{"_id", "calendar_displayName"};
        Uri calendars = Uri.parse("content://com.android.calendar/calendars");
        ContentResolver contentResolver = c.getContentResolver();
        Cursor managedCursor = contentResolver.query(calendars,
                projection, null, null, null);

        if (managedCursor != null && managedCursor.moveToFirst()) {
            String calName;
            String calID;
            int nameCol = managedCursor.getColumnIndex(projection[1]);
            int idCol = managedCursor.getColumnIndex(projection[0]);
            do {
                calName = managedCursor.getString(nameCol);
                calID = managedCursor.getString(idCol);
                if (calName.contains("@gmail")) {
                    calenderId = calID;
                    break;
                }


            } while (managedCursor.moveToNext());
            managedCursor.close();
            return calenderId;
        }

        return calenderId;

    }

syncCalendar

public static void syncCalendar(Context context, String calendarId) {
    try {
        ContentResolver cr = context.getContentResolver();
        ContentValues values = new ContentValues();
        values.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
        values.put(CalendarContract.Calendars.VISIBLE, 1);

        Uri updateUri = ContentUris.withAppendedId(CalendarContract.Calendars.CONTENT_URI, Long.parseLong(calendarId));
        cr.update(updateUri, values, null, null);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

一切都很完美,没有任何错误。它返回事件ID,表示该事件已成功添加。 问题,添加的事件在除 android pie(9)之外的所有设备上的Google日历中可见。在android pie中,它返回我事件ID,但事件未显示在日历应用中。

  

添加的事件在Google日历中对所有设备可见,除了   android pie(9)

我关注了很多SO问题和答案,但从不了解有关日历的android pie问题。

1 个答案:

答案 0 :(得分:0)

我为这个问题奋斗了很多天,但最终我解决了。问题出在我的Android Pie设备中的Google帐户上。

我遵循的步骤是

  • 从设备注销所有Google帐户
  • 然后使用所有帐户登录
  • 运行应用程序并执行代码。

之后,它可以在我的设备上正常工作。