在Android 4.0+;当天
这是相当长的一段时间,一直在寻找一个答案,我的问题。 我想做的是:从当天的所有日历中获取所有事件 我能够在ICS之前的设备(2.2到3.2 Android版本)上做到这一点,没有任何问题。在Android 4.0+上,自从引入新的日历API以来,我一直在成功地处理它。嗯,这就是我在其他设备上测试之前的想法。有时我的代码可以工作,有时不行。重复事件不会出现在某些设备或其他设备上,会显示所有事件(不仅仅是当前一天的事件) 我认为问题出在一行代码上,但我找不到正确的方法:在Android 4.0+;当天,android,calendar,google-calendar-api,android-4.2-jelly-bean,Android,Calendar,Google Calendar Api,Android 4.2 Jelly Bean,这是相当长的一段时间,一直在寻找一个答案,我的问题。 我想做的是:从当天的所有日历中获取所有事件 我能够在ICS之前的设备(2.2到3.2 Android版本)上做到这一点,没有任何问题。在Android 4.0+上,自从引入新的日历API以来,我一直在成功地处理它。嗯,这就是我在其他设备上测试之前的想法。有时我的代码可以工作,有时不行。重复事件不会出现在某些设备或其他设备上,会显示所有事件(不仅仅是当前一天的事件) 我认为问题出在一行代码上,但我找不到正确的方法: cursor = c
cursor = contentResolver.query(CalendarContract.Events.CONTENT_URI, COLS, "("+CalendarContract.Events.DTSTART+">"+now+" and "+CalendarContract.Events.DTEND+"<"+endOfDay.getTimeInMillis()+") or (("+CalendarContract.Events.ALL_DAY+"=1) and "+"("+CalendarContract.Events.DTSTART+">="+timeAllDay.getTimeInMillis()+") and "+"("+CalendarContract.Events.DTEND+"<="+endTimeAllDay.getTimeInMillis()+"))", null, null);
cursor=contentResolver.query(CalendarContract.Events.CONTENT\u URI,COLS,“(“+CalendarContract.Events.DTSTART+”>“+now+”和“+CalendarContract.Events.DTEND+”=“+timeAllDay.getTimeInMillis()”)和“+”(“+CalendarContract.Events.DTEND+”+和“+CalendarContract.Events.DTEND+”=“+timeAllDay.getTimeInMillis()”)和“+”()+CalendarContract.Events.DTEND+“要获取定期事件,您需要实例表,请参阅更多详细信息
恐怕这不像看上去那么容易
public class ICSCalendar extends AsyncTask<Intent, String, Intent>
{
private static final String[] COLS = new String[] {CalendarContract.Events.TITLE, CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND, CalendarContract.Events.ALL_DAY};
@Override
protected Intent doInBackground(Intent... params)
{
ContentResolver contentResolver = Alert.mContext.getContentResolver();
Cursor cursor = null;
try
{
long now = new Date().getTime();
Calendar endOfDay = Calendar.getInstance();
endOfDay.set(Calendar.HOUR_OF_DAY, 23);
endOfDay.set(Calendar.MINUTE, 59);
endOfDay.set(Calendar.SECOND, 59);
Calendar timeAllDay = Calendar.getInstance();
timeAllDay.set(Calendar.HOUR_OF_DAY, 0);
timeAllDay.set(Calendar.MINUTE, 0);
timeAllDay.set(Calendar.SECOND, 0);
Calendar endTimeAllDay = Calendar.getInstance();
endTimeAllDay.add(Calendar.DAY_OF_MONTH, 1);
endTimeAllDay.set(Calendar.HOUR_OF_DAY, 2);
endTimeAllDay.set(Calendar.MINUTE, 0);
endTimeAllDay.set(Calendar.SECOND, 1);
cursor = contentResolver.query(CalendarContract.Events.CONTENT_URI, COLS, "("+CalendarContract.Events.DTSTART+">"+now+" and "+CalendarContract.Events.DTEND+"<"+endOfDay.getTimeInMillis()+") or (("+CalendarContract.Events.ALL_DAY+"=1) and "+"("+CalendarContract.Events.DTSTART+">="+timeAllDay.getTimeInMillis()+") and "+"("+CalendarContract.Events.DTEND+"<="+endTimeAllDay.getTimeInMillis()+"))", null, null);
Intent calendarData = new Intent(Alerts.CALENDAR_UI_DATA);
int nb_events = 0;
while(cursor.moveToNext())
{
nb_events++;
final String title = cursor.getString(0);
final Date begin = new Date(cursor.getLong(1));
final Boolean allDay = !cursor.getString(3).equals("0");
calendarData.putExtra("event_"+nb_events, (String) title);
calendarData.putExtra("all_day_event_"+nb_events, (Boolean) allDay);
Calendar beginEvent = Calendar.getInstance();
beginEvent.setTimeInMillis(cursor.getLong(1));
String format = Alerts.get24HourMode(Alert.mContext) ? "kk:mm": "h:mm";
CharSequence newTime = DateFormat.format(format, beginEvent);
if(format == "h:mm")
{
if((beginEvent.get(Calendar.AM_PM) == 0))
{
newTime = newTime + " A.M";
}
else
{
newTime = newTime + " P.M";
}
}
if(!allDay)
{
calendarData.putExtra("date_event_"+nb_events, newTime);
}
else
{
calendarData.putExtra("date_event_"+nb_events, Alert.mContext.getString(R.string.tts_whole_day_calendar_event));
}
}
calendarData.putExtra("nb_events", nb_events);
return calendarData;
}
catch(Exception e)
{
Log.d("DEBUG", ""+e);
return null;
}
}
@Override
protected void onPostExecute(Intent result)
{
// TODO Auto-generated method stub
super.onPostExecute(result);
try
{
Alert.mContext.sendBroadcast(result);
}
catch(NullPointerException e){}
}
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onProgressUpdate(String... values)
{
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}