Java Android创建日历事件始终作为生日
当我以编程方式创建日历事件时,我遇到了一个奇怪的问题 它总是记为生日日历(类型),我不知道为什么它会这样记 我使用的代码如下:Xamarin C# 请问有人有什么建议或想法可以告诉我正确的方向吗Java Android创建日历事件始终作为生日,java,c#,android,mobile,xamarin,Java,C#,Android,Mobile,Xamarin,当我以编程方式创建日历事件时,我遇到了一个奇怪的问题 它总是记为生日日历(类型),我不知道为什么它会这样记 我使用的代码如下:Xamarin C# 请问有人有什么建议或想法可以告诉我正确的方向吗 提前谢谢。下面回答的问题是老问题,请参考答案,它提供了更准确的答案 您必须将CalendarId值设置为3,而不是默认的生日日历1。 e、 g 换成 values.Put(CalendarContract.Events.InterfaceConsts.CalendarId, 3); 它为我解决了同样的
提前谢谢。下面回答的问题是老问题,请参考答案,它提供了更准确的答案 您必须将CalendarId值设置为3,而不是默认的生日日历1。 e、 g 换成
values.Put(CalendarContract.Events.InterfaceConsts.CalendarId, 3);
它为我解决了同样的问题 有些设备在生日时使用日历id=1,但通常不使用。因此,要获取特定设备的正确日历id(对应于使用calendar app配置的电子邮件id),请使用以下代码:
private int getCalendarId(Context context){
Cursor cursor = null;
ContentResolver contentResolver = context.getContentResolver();
Uri calendars = CalendarContract.Calendars.CONTENT_URI;
String[] EVENT_PROJECTION = new String[] {
CalendarContract.Calendars._ID, // 0
CalendarContract.Calendars.ACCOUNT_NAME, // 1
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, // 2
CalendarContract.Calendars.OWNER_ACCOUNT, // 3
CalendarContract.Calendars.IS_PRIMARY // 4
};
int PROJECTION_ID_INDEX = 0;
int PROJECTION_ACCOUNT_NAME_INDEX = 1;
int PROJECTION_DISPLAY_NAME_INDEX = 2;
int PROJECTION_OWNER_ACCOUNT_INDEX = 3;
int PROJECTION_VISIBLE = 4;
cursor = contentResolver.query(calendars, EVENT_PROJECTION, null, null, null);
if (cursor.moveToFirst()) {
String calName;
long calId = 0;
String visible;
do {
calName = cursor.getString(PROJECTION_DISPLAY_NAME_INDEX);
calId = cursor.getLong(PROJECTION_ID_INDEX);
visible = cursor.getString(PROJECTION_VISIBLE);
if(visible.equals("1")){
return (int)calId;
}
Log.e("Calendar Id : ", "" + calId + " : " + calName + " : " + visible);
} while (cursor.moveToNext());
return (int)calId;
}
return 1;
}
需要注意的是:是主字段,如果是电子邮件id,则返回1,而不是比特日和假日
请参阅:了解详细信息。指向正确的方向。
您必须选择第一个既可见又主要的日历
long calId = 0;
String selection = CalendarContract.Calendars.VISIBLE + " = 1 AND "
+ CalendarContract.Calendars.IS_PRIMARY + " = 1";
Uri calendarUri = CalendarContract.Calendars.CONTENT_URI;
Cursor cur = cr.query(calendarUri, null, selection, null, null);
if (cur != null && cur.moveToFirst()) {
Get the field values
calID = cur.getLong(CalendarContract.Calendars._ID);
}
if (cur != null) {
cur.close();
}
return calId;
cur.getLong(CalendarContract.Calendars.\u ID);这是错误的。它应该是-int index=cur.getColumnIndex(CalendarContract.Calendars.\u ID);calId=当前getLong(索引);所以,在浪费了很多时间为我的问题找到解决方案之后,终于…终于你的代码解决了我的问题…非常感谢你。需要安卓。权限。阅读日历
private int getCalendarId(Context context){
Cursor cursor = null;
ContentResolver contentResolver = context.getContentResolver();
Uri calendars = CalendarContract.Calendars.CONTENT_URI;
String[] EVENT_PROJECTION = new String[] {
CalendarContract.Calendars._ID, // 0
CalendarContract.Calendars.ACCOUNT_NAME, // 1
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, // 2
CalendarContract.Calendars.OWNER_ACCOUNT, // 3
CalendarContract.Calendars.IS_PRIMARY // 4
};
int PROJECTION_ID_INDEX = 0;
int PROJECTION_ACCOUNT_NAME_INDEX = 1;
int PROJECTION_DISPLAY_NAME_INDEX = 2;
int PROJECTION_OWNER_ACCOUNT_INDEX = 3;
int PROJECTION_VISIBLE = 4;
cursor = contentResolver.query(calendars, EVENT_PROJECTION, null, null, null);
if (cursor.moveToFirst()) {
String calName;
long calId = 0;
String visible;
do {
calName = cursor.getString(PROJECTION_DISPLAY_NAME_INDEX);
calId = cursor.getLong(PROJECTION_ID_INDEX);
visible = cursor.getString(PROJECTION_VISIBLE);
if(visible.equals("1")){
return (int)calId;
}
Log.e("Calendar Id : ", "" + calId + " : " + calName + " : " + visible);
} while (cursor.moveToNext());
return (int)calId;
}
return 1;
}
long calId = 0;
String selection = CalendarContract.Calendars.VISIBLE + " = 1 AND "
+ CalendarContract.Calendars.IS_PRIMARY + " = 1";
Uri calendarUri = CalendarContract.Calendars.CONTENT_URI;
Cursor cur = cr.query(calendarUri, null, selection, null, null);
if (cur != null && cur.moveToFirst()) {
Get the field values
calID = cur.getLong(CalendarContract.Calendars._ID);
}
if (cur != null) {
cur.close();
}
return calId;