2016-03-02 151 views
0

我已经创建了一些事件并将数据存储在sqlite表中,但不是系统日历。但是,我希望为这些事件提供警报/提醒,这与存储在系统中的其他事件类似。Android:如何正确使用“CalendarAlerts”在报警中显示唯一的消息

参考以下代码,将事件的详细信息放入“CalendarAlerts”表中和广播接收器中,alertCursor用于查找开始时间接近当前时间的事件数据。

如果事件以“long”eventID存储在系统中,代码运行良好。但是,当我尝试将“sqlite事件”的数据与“字符串”eventID放在“CalendarAlerts”中时。它显示数据已成功插入表中,但我不会在“Alert Receiver”类中查询结果。

搜索谷歌一段时间,似乎并没有很多人谈论的话题“CalendarAlerts”。如果有人愿意分享这个问题的经验,那就太好了。

设置AlarmManager

Uri alertUri = CalendarAlerts.CONTENT_URI; 
long alarmMillis = (long) mStart - (long)(min*60*1000); 

ContentValues alertValues =AlertUtils.makeContentValues(eventIdentifier,mStart, mEnd,alarmMillis, 0); 
context.getContentResolver().insert(alertUri, alertValues); 

public static ContentValues makeContentValues(String eventId, long begin, long end, 
     long alarmTime, int minutes) { 
    ContentValues values = new ContentValues(); 
    values.put(CalendarAlerts.EVENT_ID, eventId); 
    values.put(CalendarAlerts.BEGIN, begin); 
    values.put(CalendarAlerts.END, end); 
    values.put(CalendarAlerts.ALARM_TIME, alarmTime); 
    long currentTime = System.currentTimeMillis(); 
    values.put(CalendarAlerts.CREATION_TIME, currentTime); 
    values.put(CalendarAlerts.RECEIVED_TIME, 0); 
    values.put(CalendarAlerts.NOTIFY_TIME, 0); 
    values.put(CalendarAlerts.STATE, CalendarAlerts.STATE_SCHEDULED); 
    values.put(CalendarAlerts.MINUTES, minutes); 
    return values; 
} 

AlertReceiver.java

Cursor alertCursor = cr.query(CalendarAlerts.CONTENT_URI, ALERT_PROJECTION, 
      (ACTIVE_ALERTS_SELECTION + currentMillis), ACTIVE_ALERTS_SELECTION_ARGS, 
      ACTIVE_ALERTS_SORT); 

回答

0

您可以使用此代码对我的作品:

ContentResolver cr = getActivity().getContentResolver(); 
ContentValues values = new ContentValues(); 

values.put(CalendarContract.Events.DTSTART, startMillis); 
values.put(CalendarContract.Events.TITLE, title); 
values.put(CalendarContract.Events.DESCRIPTION, "description"); 

TimeZone timeZone = TimeZone.getDefault(); 
values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID()); 

// default calendar 
values.put(CalendarContract.Events.CALENDAR_ID, 1); 

//for one hour 
values.put(CalendarContract.Events.DURATION, "+P1H"); 
values.put(CalendarContract.Events.HAS_ALARM, 1); 

// cr.delete(CalendarContract.Events.CONTENT_URI, null,null); 
// insert event to calendar 
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); 
+0

,这样你们居然把sqlite的事件进入系统使其工作?但是,如果你没有得到eventID,你将如何识别事件? –

+0

没有得到事件ID没有识别事件,事件ID是唯一的,是的工作为SQLite事件到设备 –

相关问题