Wie fügt man dem Standardkalender Kalenderereignisse ohne Absicht hinzu, in Android 4?

Ich möchte Kalenderereignisse programmgesteuert (direkt) in Android 4+ hinzufügen. Ist es möglich auf Emulator getestet zu werden? Ich besitze kein Android-Handy. Etwas Beispielcode würde geschätzt werden. Ich lese Kalenderanbieter von Android-Entwicklern, aber ich bin verwirrt. Wie kann ich dem Standardkalender eines Benutzers Ereignisse hinzufügen? Ich muss nicht synchronisiert werden.

BEARBEITEN: Ich möchte keine Veranstaltung starten, die Intent hinzufügt. Stattdessen möchte ich sie vollständig aus Code hinzufügen und keine andere Aktivität starten. Ich muss auf einem Emulator testen können, dass die Ereignisse zum Hauptkalender des Standardbenutzers des Geräts hinzugefügt werden. Wie richte ich einen Emulator ein, um den Standardkalender des Benutzers anzuzeigen?

    Hier ist ein funktionierendes Beispiel von dem, was ich letztendlich gemacht habe:

    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); // Set Period for 1 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); 

    wo dtuntil ist

     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, you must add one day from our day because UNTIL in RRule sets events before the last day dt.add(Calendar.DATE, 1); String dtUntill = yyyyMMdd.format(dt.getTime()); 

    Ref: Recurrence Rule

    Ich glaube, der Abschnitt, nach dem Sie suchen, verwendet eine Absicht, um ein Ereignis einzufügen . In diesem Abschnitt wird beschrieben, wie Sie eine Absicht für das Ereignis erstellen, das Sie hinzufügen möchten, und dann wird das Standardkalenderprogramm auf dem Emulator antworten und es hinzufügen. Möglicherweise müssen Sie ein Dummy-Profil einrichten, damit das Kalenderprogramm gestartet wird, wenn Sie tatsächlich sehen möchten, dass es die richtigen Informationen erhält.


    Code von Android Dev Site :

     Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 0, 19, 7, 30); Calendar endTime = Calendar.getInstance(); endTime.set(2012, 0, 19, 8, 30); Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()) .putExtra(Events.TITLE, "Yoga") .putExtra(Events.DESCRIPTION, "Group class") .putExtra(Events.EVENT_LOCATION, "The gym") .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY) .putExtra(Intent.EXTRA_EMAIL, "rowan@example.com,trevor@example.com"); startActivity(intent); 

    Mit diesem Code können Sie ein Ereignis programmgesteuert zum Gerätekalender hinzufügen. Ich habe in Marshmallow getestet, und es funktioniert gut für mich.

     private void addToDeviceCalendar(String startDate,String endDate, String title,String description, String location) { String stDate = startDate; String enDate = endDate; GregorianCalendar calDate = new GregorianCalendar(); //GregorianCalendar calEndDate = new GregorianCalendar(); SimpleDateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy,MM,dd,HH,mm"); Date date,edate; try { date = originalFormat.parse(startDate); stDate=targetFormat.format(date); } catch (ParseException ex) {} long startMillis = 0; long endMillis = 0; String dates[] = stDate.split(","); SD_YeaR = dates[0]; SD_MontH = dates[1]; SD_DaY = dates[2]; SD_HouR = dates[3]; SD_MinutE = dates[4]; /*Log.e("YeaR ", SD_YeaR); Log.e("MontH ",SD_MontH ); Log.e("DaY ", SD_DaY); Log.e(" HouR", SD_HouR); Log.e("MinutE ", SD_MinutE);*/ calDate.set(Integer.parseInt(SD_YeaR), Integer.parseInt(SD_MontH)-1, Integer.parseInt(SD_DaY), Integer.parseInt(SD_HouR), Integer.parseInt(SD_MinutE)); startMillis = calDate.getTimeInMillis(); /* try { edate = originalFormat.parse(endDate); enDate=targetFormat.format(edate); } catch (ParseException ex) {} String end_dates[] = endDate.split(","); String ED_YeaR = end_dates[0]; String ED_MontH = end_dates[1]; String ED_DaY = end_dates[2]; String ED_HouR = end_dates[3]; String ED_MinutE = end_dates[4]; calEndDate.set(Integer.parseInt(ED_YeaR), Integer.parseInt(ED_MontH)-1, Integer.parseInt(ED_DaY), Integer.parseInt(ED_HouR), Integer.parseInt(ED_MinutE)); endMillis = calEndDate.getTimeInMillis();*/ try { ContentResolver cr = getActivity().getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, calDate.getTimeInMillis() + 60 * 60 * 1000); values.put(CalendarContract.Events.TITLE, title); values.put(CalendarContract.Events.DESCRIPTION, description); values.put(CalendarContract.Events.EVENT_LOCATION,location); values.put(CalendarContract.Events.HAS_ALARM,1); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.EVENT_TIMEZONE, Calendar.getInstance() .getTimeZone().getID()); System.out.println(Calendar.getInstance().getTimeZone().getID()); if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { return; } Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); long eventId = Long.parseLong(uri.getLastPathSegment()); Log.d("Ketan_Event_Id", String.valueOf(eventId)); } catch (Exception e) { e.printStackTrace(); } } 

    Stimmen Sie mit allen Antworten überein, aber importieren ist Kalender ID. Sie können nicht 1 als Samsung Telefon verwendet 1 für ihren Kalender (S Planner) verwenden. So Kalender-ID ist ID für welche E-Mail-Ereignis möchten Sie. Sie können eine Kalender-ID erhalten, indem Sie dem Code für ein bestimmtes Ereignis folgen

     int calenderId=-1; String calenderEmaillAddress="xxx@gmail.com"; String[] projection = new String[]{ CalendarContract.Calendars._ID, CalendarContract.Calendars.ACCOUNT_NAME}; ContentResolver cr = activity.getContentResolver(); Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"), projection, CalendarContract.Calendars.ACCOUNT_NAME + "=? and (" + CalendarContract.Calendars.NAME + "=? or " + CalendarContract.Calendars.CALENDAR_DISPLAY_NAME + "=?)", new String[]{calenderEmaillAddress, calenderEmaillAddress, calenderEmaillAddress}, null); if (cursor.moveToFirst()) { if (cursor.getString(1).equals(calenderEmaillAddress)) calenderId=cursor.getInt(0); //youre calender id to be insered in above 2 answer }