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)
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)
| 归档时间: |
|
| 查看次数: |
3749 次 |
| 最近记录: |