在android中将事件添加到日历时,CALENDAR_ID应该是什么?

use*_*902 1 android android-calendar

这是我的代码,我想知道“CalendarContract.Events.CALENDAR_ID”的值是什么?这段代码适用于 Pre Android N Os,但在 Nougat 中,如果我将“1”作为值,它会在特定字段(提醒、生日、假期等)中创建一个事件,并且它会因用户而异。因此,如果我在某些牛轧糖设备中传递“5”作为值,那么我可能会在一个设备中获得正确的输出,但在另一部手机中,该事件可能会通过提醒或假期创建,并在几秒钟内自动删除。

        ContentResolver cr = context.getContentResolver();
        ContentValues values = new ContentValues();
        values.put(CalendarContract.Events.DTSTART, startMillis);
        values.put(CalendarContract.Events.DTEND, endMillis);
        values.put(CalendarContract.Events.TITLE, title);
        values.put(CalendarContract.Events.CALENDAR_ID, 1);
        values.put(CalendarContract.Events.EVENT_TIMEZONE, 
        Calendar.getInstance().getTimeZone().getID()); 
        Uri uri=cr.insert(CalendarContract.Events.CONTENT_URI,
        values);
        long eventId = Long.parseLong(uri.getLastPathSegment());
Run Code Online (Sandbox Code Playgroud)

Sia*_*hei 5

ID取决于设备制造商添加的日历数量。但您只能使用用户日历。例如,如果您将事件添加到假期日历中,它将在同步时删除。用户还可以将多个 Google 用户添加到手机中,因此在这种情况下,更好的选择是询问用户他想要使用什么日历:

 public class CalendarItem{
    private int id;
    private String name;

    ... getters and setters ...
}

public List<CalendarItem> getCalendars(Context ctx){
    if (ActivityCompat.checkSelfPermission(ctx, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
        return null;
    }

    List<CalendarItem> result = new ArrayList();

    final String[] EVENT_PROJECTION = new String[]{
            CalendarContract.Calendars._ID,
            CalendarContract.Calendars.NAME
    };

    final ContentResolver cr = ctx.getContentResolver();
    final Uri uri = CalendarContract.Calendars.CONTENT_URI;
    Cursor cur = cr.query(uri, EVENT_PROJECTION, null, null, null);

    while (cur.moveToNext()) {
        CalendarItem item = new CalendarItem();
        item.setId(cur.getInt(cur.getColumnIndex(CalendarContract.Calendars._ID)));
        item.setName(cur.getString(cur.getColumnIndex(CalendarContract.Calendars.NAME)));
        if (isEmailValid(item.getName)){
            result.add(item);
        }
    }
    cur.close();
    return result;
}

//user calendar name == email
private boolean isEmailValid(String email) {
    if (TextUtils.isEmpty(email)) return false;
    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(email);
    return matcher.matches();
}
Run Code Online (Sandbox Code Playgroud)