Wie kann ich dem Kalender automatisch ein Ereignis hinzufügen?

Wie kann ich dem Kalender automatisch ein Ereignis hinzufügen? Wenn ich diesen Quellcode verwende, öffnet es den Kalender mit gefüllten Einträgen, aber ich muss auf die Schaltfläche Speichern klicken, um ihn zu speichern.

public class CalendarApplicationActivity extends Activity { public static final String[] EVENT_PROJECTION = new String[] { Calendars._ID, // 0 Calendars.ACCOUNT_NAME, // 1 Calendars.CALENDAR_DISPLAY_NAME // 2 }; private static final int PROJECTION_DISPLAY_NAME_INDEX = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calendar_application); } public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_INSERT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra(Events.TITLE, "Learn Android"); intent.putExtra(Events.EVENT_LOCATION, "Home suit home"); intent.putExtra(Events.DESCRIPTION, "Download Examples"); GregorianCalendar calDate = new GregorianCalendar(2012, 10, 02); intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, calDate.getTimeInMillis()); intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, calDate.getTimeInMillis()); intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true); intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE); intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY); startActivity(intent); } } 

  • Android: Es ist eine gute Praxis, Kontext statisch zu bekommen?
  • Versuchen, die Anzeigegröße eines Bildes in einem ImageView zu erhalten
  • Facebook API-Anmeldung schlägt fehl, wenn die FB App am Telefon installiert ist
  • Android-Extras über Spracherkennung funktioniert nicht
  • Richtig behandeln DrawerLayout Animation beim Navigieren durch Fragment
  • In der App-Abrechnung v3 NullPointerException
  • Resize android datepicker Kontrolle
  • Sencha Touch 2.1: Formular Panel Tastatur verbirgt aktives Textfeld auf Android
  • Android HttpsUrlConnection eofexception
  • Gradle wird bei "Build" oder "assembleDebug" bei der Verwendung der 64-Bit- oder 32-Bit-Version von Android Studio gehaftet
  • Android Toast wird nicht verschwinden
  • Android Studio sieht keine genymotion
  • 4 Solutions collect form web for “Wie kann ich dem Kalender automatisch ein Ereignis hinzufügen?”

    Ich gebe Ihnen diesen Code, der in einer meiner App auf dem Markt verwendet wird. Es fügt dem Benutzer Kalender automatisch das Ereignis hinzu. Es verwendet keine Absicht, die eine Benutzeraktion erfordert.

     public void addEvent(CalendarEvent evt) { //Log.d(Params.LOG_APP, "Insert event ["+evt+"]"); try { Uri evtUri = ctx.getContentResolver().insert(getCalendarUri("events"), CalendarEvent.toContentValues(evt)); Log.d(Params.LOG_APP, "" + evtUri); } catch(Throwable t) { //Log.e(Params.LOG_APP, "", t); } } public void setContext(Context context) { this.ctx = context; this.baseUri = getCalendarUriBase(); } private Uri getCalendarUri(String path) { return Uri.parse(baseUri + "/" + path); } private String getCalendarUriBase() { String calendarUriBase = null; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = null; try { managedCursor = ctx.getContentResolver().query(calendars, null, null, null, null); } catch (Exception e) { // e.printStackTrace(); } if (managedCursor != null) { calendarUriBase = "content://calendar/"; } else { calendars = Uri.parse("content://com.android.calendar/calendars"); try { managedCursor = ctx.getContentResolver().query(calendars, null, null, null, null); } catch (Exception e) { // e.printStackTrace(); } if (managedCursor != null) { calendarUriBase = "content://com.android.calendar/"; } } Log.d(Params.LOG_APP, "URI ["+calendarUriBase+"]"); return calendarUriBase; } 

    Und für ICS und später

     public void addEvent(CalendarEvent evt) { ContentResolver cr = context.getContentResolver(); Uri uri = cr.insert(Events.CONTENT_URI, CalendarEvent.toICSContentValues(evt)); System.out.println("Event URI ["+uri+"]"); } 

    CalendarEvent ist wie

     public static ContentValues toContentValues(CalendarEvent evt) { ContentValues cv = new ContentValues(); cv.put("calendar_id", evt.getIdCalendar()); cv.put("title", evt.getTitle()); cv.put("description", evt.getDescr()); cv.put("eventLocation", evt.getLocation()); cv.put("dtstart", evt.getStartTime()); cv.put("dtend", evt.getEndTime()); cv.put("eventStatus", 1); cv.put("visibility", 0); cv.put("transparency", 0); return cv; } public static ContentValues toICSContentValues(CalendarEvent evt) { ContentValues cv = new ContentValues(); cv.put(Events.CALENDAR_ID, evt.getIdCalendar()); cv.put(Events.TITLE, evt.getTitle()); cv.put(Events.DESCRIPTION, evt.getDescr()); cv.put(Events.EVENT_LOCATION, evt.getLocation()); cv.put(Events.DTSTART, evt.getStartTime()); cv.put(Events.DTEND, evt.getEndTime()); Calendar cal = Calendar.getInstance(); TimeZone tz = cal.getTimeZone(); cv.put(Events.EVENT_TIMEZONE, tz.getDisplayName()); /* cv.put(Events.STATUS, 1); cv.put(Events.VISIBLE, 0); cv.put("transparency", 0); return cv; */ return cv; } 

    Ich habe den folgenden Code benutzt, um das Ereignis in meinem eigenen Kalender hinzuzufügen

    Public void SyncEvent (long id, int meeting_id, String EventName, String Stime, String Etime, String Beschreibung) {

      Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("GMT-1")); Date dt = null; Date dt1 = null; try { dt = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(Stime); dt1 = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(Etime); Calendar beginTime = Calendar.getInstance(); cal.setTime(dt); // beginTime.set(2013, 7, 25, 7, 30); beginTime.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); Calendar endTime = Calendar.getInstance(); cal.setTime(dt1); // endTime.set(2013, 7, 25, 14, 30); // endTime.set(year, month, day, hourOfDay, minute); endTime.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); ContentResolver cr = this.mContext.getContentResolver(); ContentValues values = new ContentValues(); values.put(Events.DTSTART, beginTime.getTimeInMillis()); values.put(Events.DTEND, endTime.getTimeInMillis()); values.put(Events.TITLE, EventName); values.put(Events.DESCRIPTION, Description); values.put(Events.CALENDAR_ID, id); // values.put(Events._ID, meeting_id); values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); Uri uri = cr.insert(Events.CONTENT_URI, values); long eventID = Long.parseLong(uri.getLastPathSegment()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 

    Dieser Code fügt ein Ereignis hinzu und zeigt das Ereignis in der Kalenderansicht an. Kein Klick auf 'Speichern' / Benutzerinteraktion erforderlich.

      long calID = 3; long startMillis = 0; long endMillis = 0; Calendar beginTime = Calendar.getInstance(); beginTime.set(2015, 6, 12, 7, 30);// set(int year, int month, int day, int hourOfDay, int minute) startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2015, 6, 12, 8, 30); endMillis = endTime.getTimeInMillis(); TimeZone tz = TimeZone.getDefault(); ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, endMillis); values.put(CalendarContract.Events.TITLE, "Jazzercise"); values.put(CalendarContract.Events.DESCRIPTION, "Group workout"); values.put(CalendarContract.Events.CALENDAR_ID, calID); values.put(CalendarContract.Events.EVENT_TIMEZONE, tz.getID()); 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()); Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendPath("time"); ContentUris.appendId(builder, startMillis); Intent intent = new Intent(Intent.ACTION_VIEW).setData(builder.build()); startActivity(intent); 

    Wenn Sie Intents verwenden, um mit dem Kalenderanbieter zu kommunizieren, dann, wie Sie bemerkt haben, fragt die Kalender-App zur Bestätigung vom Benutzer. Dies ist, weil mit Intents bedeutet, dass Sie keine besonderen Berechtigungen anfordern müssen.

    Übrigens empfiehlt Google die Verwendung von Intents für die Interaktion mit dem Kalender.

    Wenn Sie jedoch das automatische Einfügen von Ereignissen wünschen, muss Ihre App die WRITE_CALENDAR im Manifest haben. Anstatt Intents zu verwenden, benutzt du einen ContentResolver. Sie können den Beispielcode unter https://developer.android.com/guide/topics/providers/calendar-provider.html im Abschnitt Hinzufügen von Ereignissen sehen .

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.