10

サービスでいくつかの薬物情報をダウンロードするAndroidアプリがあります。

たとえば、(fludex white round 2 24-02-2012) は、今日から 2012 年 1 月 24 日まで、fludex という名前の薬、白と丸を 1 日 2 回投与する必要があることを意味します。

ここで、薬物情報のダウンロード後に、薬物情報を含む繰り返しイベントをサイレント/プログラムで(ユーザーの操作なしで)カレンダーに追加したいと考えています。そのため、今日から 2012 年 1 月 24 日まで、午前 10 時と午後 10 時ごとに、薬を服用する 10 分前にリマインダーが表示されます。私のアプリはAndroid 2-4用になります。どうすればそれを行うことができますか、これまでの検索で混乱しています。

2 番目の質問: アプリケーションから作成されたイベント (およびそれらのリマインダー) のみを削除するにはどうすればよいですか? 薬物療法を同期して以前のすべてのイベントを削除し、サービスから受け取った新しい薬物療法に基づいて新しいイベントを生成する場合はどうすればよいですか?

4

3 に答える 3

18
        ContentResolver cr = ctx.getContentResolver();
        ContentValues values = new ContentValues();
            
        values.put(CalendarContract.Events.DTSTART, dtstart);
        values.put(CalendarContract.Events.TITLE, title);
        values.put(CalendarContract.Events.DESCRIPTION, comment);
        
        TimeZone timeZone = TimeZone.getDefault();
        values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());

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

        values.put(CalendarContract.Events.RRULE, "FREQ=DAILY;UNTIL="
                + dtUntill);
        // for one hour
        values.put(CalendarContract.Events.DURATION, "+P1H");

        values.put(CalendarContract.Events.HAS_ALARM, 1);

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

ここでdtuntilは

    SimpleDateFormat yyyymmdd = new SimpleDateFormat("yyyymmdd");
    Calendar dt = Calendar.getInstance();

    // where untilDate is a date instance of your choice,for example 30/01/2012
    dt.setTime(untilDate);

    // if you want the event until 30/01/2012 we add one day from our day
    // because UNTIL in RRule sets events Before the last day want for event
    dt.add(Calendar.DATE, 1);
    String dtUntill = yyyymmdd.format(dt.getTime());

    // Uri
    Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);

    // get the event ID that is the last element in the Uri
    long eventID = Long.parseLong(uri.getLastPathSegment());

    // add 10 minute reminder for the event
    ContentValues reminders = new ContentValues();
    reminders.put(Reminders.EVENT_ID, eventID);
    reminders.put(Reminders.METHOD, Reminders.METHOD_ALERT);
    reminders.put(Reminders.MINUTES, 10);

    Uri uri = cr.insert(Reminders.CONTENT_URI, reminders);

参照:Recurrence Rule

于 2012-12-14T14:49:39.347 に答える
2

これがあなたが望むものの良い例です。

カレンダーとリマインダー やその他の実装の詳細については、これを参照してください

次のコードからヘルプを取得することもできます

Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", date);
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY"); //To set the repeat rule
intent.putExtra("endTime", date);
intent.putExtra("title", summary);
于 2012-11-30T20:04:44.023 に答える