ユーザーに薬の服用を思い出させる通知があります。たとえば、午後 9 時と午後 9 時 1 分に薬を服用する新しい時刻を追加すると、最後の通知のみがアクティブになります。これが私のコードです:
AddTime.java: (一部)
Cursor cursor2 = sqdb.rawQuery("SELECT Name FROM Medicine WHERE _id = " + mId, null);
while(cursor2.moveToNext()) {
med = cursor2.getString(cursor2.getColumnIndex("Name"));
} //med - Name of medicine
String sql = "SELECT _id FROM Time WHERE mId = "+mId+" AND Year = "+year+" AND Month = '"+_month+"' AND Day = "+_numDay+" AND Week = '"+_week+"' AND Hour = "+_hour+" AND Minute = "+_min+" AND AMORPM = '"+_ampm+"' AND CalendarDate = '"+calDate+"'";
Cursor cursor = sqdb.rawQuery(sql, null);
int tId = 0;
while(cursor.moveToNext()) {
tId = cursor.getInt(cursor.getColumnIndex("_id"));
} //Unique id for notification
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent _intent = new Intent(this, TimeAlarm.class);
_intent.putExtra("TIMEID", tId);
_intent.putExtra("MEDNAME", med);
Calendar c = Calendar.getInstance();
int Years = c.get(Calendar.YEAR);
int Months = c.get(Calendar.MONTH);
int Days = c.get(Calendar.DAY_OF_MONTH);
int Hours = c.get(Calendar.HOUR_OF_DAY);
int Minutes = c.get(Calendar.MINUTE);
GregorianCalendar curDate = new GregorianCalendar(Years, Months, Days, Hours, Minutes, 0);
GregorianCalendar nextDate = new GregorianCalendar(year, Month, _numDay, _hour, _min, 0);
long millisecDiff = nextDate.getTimeInMillis() - curDate.getTimeInMillis();
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, _intent, PendingIntent.FLAG_ONE_SHOT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + millisecDiff, pIntent);
TimeAlarm.java
public class TimeAlarm extends BroadcastReceiver {
NotificationManager nm;
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
int timeid = intent.getExtras().getInt("TIMEID");
String medname = intent.getExtras().getString("MEDNAME");
CharSequence from = "Title";
CharSequence message = "Message";
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(), 0);
Notification notif = new Notification(R.drawable.icon,
"Text", System.currentTimeMillis());
notif.setLatestEventInfo(context, from, message, contentIntent);
nm.notify(timeid, notif);
}
}