添加事件和提醒在 6.0 marshmallow 中不起作用

Add event and reminder not working in 6.0 marshmallow

我遇到了一个奇怪的问题。 我正在尝试在 calendarreminder 中添加事件。除了 Marshmallow - 6.0

的设备外,它在所有设备上都运行良好

当我尝试添加事件时,它也会 returns 我的事件 ID 在这里。即使我在这里获取事件 ID,I can not see events added in my calendar

   ContentValues event = new ContentValues();
        event.put("calendar_id", 1);
        event.put("title", "Match");
        event.put("description",PTGConstantMethod.validateString(match.getMatch_name()));
        event.put("eventLocation", match.getVenue());
        event.put("eventTimezone", TimeZone.getDefault().getID());
        event.put("dtstart", startDate.getTime());
        event.put("dtend", endDate);

        event.put("allDay", 0); // 0 for false, 1 for true
        event.put("eventStatus", 1);
        event.put("hasAlarm", 1); // 0 for false, 1 for true

        Uri eventUri = context.getApplicationContext()
                .getContentResolver()
                .insert(Events.CONTENT_URI, event);
        long eventID = Long.parseLong(eventUri.getLastPathSegment());

我在这里添加提醒,

        ContentValues reminders = new ContentValues();
            reminders.put("event_id", eventID);
            reminders.put("method", CalendarContract.Reminders.METHOD_ALERT);
            reminders.put("minutes", minutes);

            context.getApplicationContext().getContentResolver()
                    .insert(Reminders.CONTENT_URI, reminders);

但是应用程序在添加提醒时崩溃了。这是我的日志。

android.database.sqlite.SQLiteException at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:179) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) at android.content.ContentProviderProxy.insert(ContentProviderNative.java:476) at android.content.ContentResolver.insert(ContentResolver.java:1231)

在我的build.gradle

  minSdkVersion 14
  targetSdkVersion 22

终于发现没有event.put("calendar_id", 1);的日历了。那么我怎样才能获得应用程序默认日历?

我尝试添加新日历并向其中添加事件。

        ContentValues calendar = new ContentValues();
    calendar.put(CalendarContract.Calendars.NAME, context.getResources().getString(R.string.app_name));
    calendar.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, context.getResources().getString(R.string.app_name)+" Calendar");
    calendar.put(CalendarContract.Calendars.VISIBLE, true);

    Uri uri = context.getApplicationContext()
            .getContentResolver()
            .insert(CalendarContract.Calendars.CONTENT_URI, calendar);
    long calendarId = Long.parseLong(uri.getLastPathSegment());

但是我无法在我的日历应用程序中看到这个日历。当我尝试使用这个新日历添加事件时。事件得到显示,但在单击事件时,我的默认日历应用程序崩溃了。将新日历添加到默认日历应用程序时我做错了什么?谢谢。

很抱歉以这种方式发布答案,但是我在 Android M 日历中手动添加事件时发现,它说我们需要将帐户添加到日历帐户才能添加事件。所以我猜测除非并且直到我们不添加日历或将日历映射到至少一个帐户,否则我们无法手动或以编程方式将事件添加到 Android M 设备日历。

尝试以下 link:

How to add multiple event to android marshmallow Calendar?

也许您想在 Fragment 中使用。

首次使用:

super.requestPermissions( new String[]{Manifest.permission.WRITE_CALENDAR}, MY_PERMISSIONS_REQUEST_WRITE_CALENDAR);

片段内部,需要调用:

FragmentCompat.requestPermissions(permissionsList, RequestCode)

注:

ActivityCompat.requestPermissions(Activity, permissionsList, RequestCode);

在 gradle 中为 FragmentCompat class 添加此库。

compile 'com.android.support:support-v13:version_of_library'