Как установить напоминание в Android?

Я пытаюсь создать приложение для календарей для Android. Я поражен посередине. Мне удалось получить информацию от пользователя, такую ​​как время и задача.

Я не знаю, как добавить это в события Android. Есть что-то вроде setEvent или что-то подобное?

    Нет, это сложнее, чем просто вызов метода, если вы хотите прозрачно добавить его в календарь пользователя.

    У вас есть несколько вариантов;

    1. Вызов намерения добавить событие в календарь
      Это откроет приложение «Календарь» и позволит пользователю добавить событие. Вы можете передать некоторые параметры для предварительного заполнения полей:

       Calendar cal = Calendar.getInstance(); Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime", cal.getTimeInMillis()); intent.putExtra("allDay", false); intent.putExtra("rrule", "FREQ=DAILY"); intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); intent.putExtra("title", "A Test Event from android app"); startActivity(intent); 

      Или более сложный:

    2. Получить ссылку на календарь с помощью этого метода
      ( Настоятельно рекомендуется не использовать этот метод, потому что он может сломаться на новых версиях Android):

       private String getCalendarUriBase(Activity act) { String calendarUriBase = null; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = null; try { managedCursor = act.managedQuery(calendars, null, null, null, null); } catch (Exception e) { } if (managedCursor != null) { calendarUriBase = "content://calendar/"; } else { calendars = Uri.parse("content://com.android.calendar/calendars"); try { managedCursor = act.managedQuery(calendars, null, null, null, null); } catch (Exception e) { } if (managedCursor != null) { calendarUriBase = "content://com.android.calendar/"; } } return calendarUriBase; } 

      и добавьте событие и напоминание следующим образом :

       // get calendar Calendar cal = Calendar.getInstance(); Uri EVENTS_URI = Uri.parse(getCalendarUriBase(this) + "events"); ContentResolver cr = getContentResolver(); // event insert ContentValues values = new ContentValues(); values.put("calendar_id", 1); values.put("title", "Reminder Title"); values.put("allDay", 0); values.put("dtstart", cal.getTimeInMillis() + 11*60*1000); // event starts at 11 minutes from now values.put("dtend", cal.getTimeInMillis()+60*60*1000); // ends 60 minutes from now values.put("description", "Reminder description"); values.put("visibility", 0); values.put("hasAlarm", 1); Uri event = cr.insert(EVENTS_URI, values); // reminder insert Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(this) + "reminders"); values = new ContentValues(); values.put( "event_id", Long.parseLong(event.getLastPathSegment())); values.put( "method", 1 ); values.put( "minutes", 10 ); cr.insert( REMINDERS_URI, values ); 

      Вам также нужно будет добавить эти разрешения в манифест для этого метода:

         

    Обновление: проблемы с ICS

    В приведенных выше примерах используются недокументированные API-интерфейсы календаря, для ICS были выпущены новые общедоступные API-интерфейсы календарей, поэтому по этой причине для целевых новых версий Android вы должны использовать CalendarContract .

    Более подробную информацию об этом можно найти в этом блоге .

    Вы можете использовать AlarmManager в сотрудничестве с механизмом уведомления. Что-то вроде этого:

     Intent intent = new Intent(ctx, ReminderBroadcastReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager am = (AlarmManager) ctx.getSystemService(Activity.ALARM_SERVICE); // time of of next reminder. Unix time. long timeMs =... if (Build.VERSION.SDK_INT < 19) { am.set(AlarmManager.RTC_WAKEUP, timeMs, pendingIntent); } else { am.setExact(AlarmManager.RTC_WAKEUP, timeMs, pendingIntent); } 

    Он начинает тревогу.

     public class ReminderBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { NotificationCompat.Builder builder = new NotificationCompat.Builder(context) .setSmallIcon(...) .setContentTitle(..) .setContentText(..); Intent intentToFire = new Intent(context, Activity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intentToFire, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(pendingIntent); NotificationManagerCompat.from(this);.notify((int) System.currentTimeMillis(), builder.build()); } } 

    Android полный исходный код для добавления событий и напоминаний.

     /** Adds Events and Reminders in Calendar. */ private void addReminderInCalendar() { Calendar cal = Calendar.getInstance(); Uri EVENTS_URI = Uri.parse(getCalendarUriBase(true) + "events"); ContentResolver cr = getContentResolver(); TimeZone timeZone = TimeZone.getDefault(); /** Inserting an event in calendar. */ ContentValues values = new ContentValues(); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.TITLE, "Sanjeev Reminder 01"); values.put(CalendarContract.Events.DESCRIPTION, "A test Reminder."); values.put(CalendarContract.Events.ALL_DAY, 0); // event starts at 11 minutes from now values.put(CalendarContract.Events.DTSTART, cal.getTimeInMillis() + 1 * 60 * 1000); // ends 60 minutes from now values.put(CalendarContract.Events.DTEND, cal.getTimeInMillis() + 2 * 60 * 1000); values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID()); values.put(CalendarContract.Events.HAS_ALARM, 1); Uri event = cr.insert(EVENTS_URI, values); // Display event id. Toast.makeText(getApplicationContext(), "Event added :: ID :: " + event.getLastPathSegment(), Toast.LENGTH_SHORT).show(); /** Adding reminder for event added. */ Uri REMINDERS_URI = Uri.parse(getCalendarUriBase(true) + "reminders"); values = new ContentValues(); values.put(CalendarContract.Reminders.EVENT_ID, Long.parseLong(event.getLastPathSegment())); values.put(CalendarContract.Reminders.METHOD, Reminders.METHOD_ALERT); values.put(CalendarContract.Reminders.MINUTES, 10); cr.insert(REMINDERS_URI, values); } /** Returns Calendar Base URI, supports both new and old OS. */ private String getCalendarUriBase(boolean eventUri) { Uri calendarURI = null; try { if (android.os.Build.VERSION.SDK_INT <= 7) { calendarURI = (eventUri) ? Uri.parse("content://calendar/") : Uri.parse("content://calendar/calendars"); } else { calendarURI = (eventUri) ? Uri.parse("content://com.android.calendar/") : Uri .parse("content://com.android.calendar/calendars"); } } catch (Exception e) { e.printStackTrace(); } return calendarURI.toString(); } 

    Добавьте разрешение в файл манифеста.

       
    Interesting Posts

    Как выполнить сравнение подстановочных строк в пакетном файле

    Изменение цвета по умолчанию Firefox при открытии ссылок на новой вкладке

    UTF-8 без спецификации

    В чем разница между переопределением виртуальных функций и скрытием не виртуальных функций?

    C ++ Template Metaprogramming – Можно ли выводить сгенерированный код?

    Безмолвно игнорируется remove ()

    Избегайте передачи null в качестве корня представления (необходимо разрешить параметры макета на корневом элементе раздутого макета)

    Почему в области уведомлений нет доступа к Интернету, когда нет связи с какой-либо сетью, либо Wired / Wireless

    Как работает IsMobileDevice?

    Как остановить интерпретатор команд Windows от завершения выполнения пакетного файла при некорректном вводе пользователя?

    Измените цвет текста одного ClickableSpan при нажатии, не затрагивая другие ClickableSpans в том же TextView

    Общая ошибка при открытии ссылки в Outlook 2007

    «adb» не распознается как внутренняя или внешняя команда, операционная программа или командный файл

    Включить совместное использование файлов в Windows Vista

    Что произойдет, если произойдет сбой при установке зашифрованного тома?

    Давайте будем гением компьютера.