2015-08-03 2 views
0

Je veux ajouter un événement à mon calendrier natif en utilisant le code ci-dessous. et ça marche bien.Puis-je ajouter un événement au calendrier sans que l'utilisateur ne le sache dans Android?

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm"); 
       final Calendar cal = Calendar.getInstance(); 
       try { 
        cal.setTime(formatter.parse(datetime)); 
        eventdate = cal.get(Calendar.YEAR)+"/"+cal.get(Calendar.MONTH)+"/"+cal.get(Calendar.DAY_OF_MONTH)+" "+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE); 
        Log.e("event date",eventdate); 
       } 
       catch (ParseException e) { 
        e.printStackTrace(); 
       } 
       Intent intent = new Intent(Intent.ACTION_EDIT); 
       intent.setType("vnd.android.cursor.item/event"); 
       intent.putExtra("beginTime", cal.getTimeInMillis()); 
       intent.putExtra("allDay", true); 
       intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); 
       intent.putExtra("title", title); 
       intent.putExtra("description",desc); 
       c.startActivity(intent); 

Cela ouvre un écran où il me demande d'enregistrer l'événement. et quand je clique sur enregistrer, il enregistre mon événement dans le calendrier. ci-dessous est la capture d'écran pour cela.

enter image description here

Maintenant, ce que je veux est d'ajouter un événement directement au calendrier natif, sans montrer l'écran ci-dessus. Y a-t-il un moyen de le faire?

+0

Possible dupliquer http://stackoverflow.com/questions/16068082/how-can-i-add-event-to-the-calendar-automatically –

Répondre

3

Vous pouvez consulter le code ci-dessous pour ajouter des événements dans le calendrier.

String GLOBAL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; 
String gameDate="2015-07-12 01:10:00"; 
     Date startDate = DateConstants.getDateFromString(
       gameDate,GLOBAL_DATE_FORMAT); 
     long endDate = startDate.getTime() 
       + (PTGConstantMethod.validateInteger(game 
         .getGame_duration()) * 1000); 

     ContentValues event = new ContentValues(); 
     event.put("calendar_id", 1); 
     event.put("title", "Game#" + game.getId()); 
     event.put("description", game.getLocation()); 
     event.put("eventLocation", game.getLocation()); 
     event.put("eventTimezone", TimeZone.getDefault().getID()); 
     event.put("dtstart", startDate.getTime()); 
     event.put("dtend", endDate); 

     event.put("allDay", 0); // 0 for false, 1 for true 
     event.put("eventStatus", 1); 
     event.put("hasAlarm", 1); // 0 for false, 1 for true 

     String eventUriString = "content://com.android.calendar/events"; 
     Uri eventUri = context.getApplicationContext() 
       .getContentResolver() 
       .insert(Uri.parse(eventUriString), event); 
     long eventID = Long.parseLong(eventUri.getLastPathSegment()); 

// if reminder need to set 


      int minutes=120; 


      // add reminder for the event 
      ContentValues reminders = new ContentValues(); 
      reminders.put("event_id", eventID); 
      reminders.put("method", "1"); 
      reminders.put("minutes", minutes); 

      String reminderUriString = "content://com.android.calendar/reminders"; 
      context.getApplicationContext().getContentResolver() 
      .insert(Uri.parse(reminderUriString), reminders); 
+0

à quoi sert ce code, je suppose que c'est inutile pour moi comme j'ai déjà date de début. 'Date startDate = DateConstants.getDateFromString ( gameDate, GLOBAL_DATE_FORMAT); long endDate = startDate.getTime() + (PTGConstantMethod.validateInteger (jeu .getGame_duration()) * 1000); ' –

+0

bonne réponse! ça a marché pour moi. thanx –

+0

Vous êtes toujours les bienvenus .. :) – Beena

1
Intent intent = new Intent(Intent.ACTION_EDIT); 
       intent.setType("vnd.android.cursor.item/event"); 
       intent.putExtra("beginTime", cal.getTimeInMillis()); 
       intent.putExtra("allDay", true); 
       intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); 
       intent.putExtra("title", title); 
       intent.putExtra("description",desc); 
       c.startActivity(intent); 

n'utilisent pas parce que ici en appelant cette c.startActivity(intent); vous commencez une activité qui va permettre à l'utilisateur dans le calendrier et demander de l'enregistrer au lieu d'utiliser ce que vous pouvez utiliser pour insérer la ContentResolver événement avec vous infomatio

n comme celui-ci

  try 
      { 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm"); 
Calendar cal = Calendar.getInstance(); 
    cal.setTime(formatter.parse(datetime)); 
         eventdate = cal.get(Calendar.YEAR)+"/"+cal.get(Calendar.MONTH)+"/"+cal.get(Calendar.DAY_OF_MONTH)+" "+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE); 
         Log.e("event date",eventdate); 
    // provide CalendarContract.Calendars.CONTENT_URI to 
    // ContentResolver to query calendars 
      Cursor  cur = this.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI,null, null, null, null); 
       if (cur.moveToFirst()) 
       { 
        long calendarID=cur.getLong(cur.getColumnIndex(CalendarContract.Calendars._ID)); 
    ContentValues eventValues = new ContentValues(); 
    // provide the required fields for creating an event to 
    // ContentValues instance and insert event using 
    // ContentResolver 
      eventValues.put (CalendarContract.Events.CALENDAR_ID, calendarID); 
      eventValues.put(CalendarContract.Events.TITLE, "Event 1"+title); 
      eventValues.put(CalendarContract.Events.DESCRIPTION," Calendar API"+desc); 
eventValues.put(CalendarContract.Events.ALL_DAY,true); 
      eventValues.put(CalendarContract.Events.DTSTART, (cal.getTimeInMillis()+60*60*1000)); 
      eventValues.put(CalendarContract.Events.DTEND, cal.getTimeInMillis()+60*60*1000); 
      eventValues.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().toString()); 
      Uri eventUri = this.getContentResolver().insert(CalendarContract.Events.CONTENT_URI, eventValues); 
      eventID = ContentUris.parseId(eventUri); 
       } 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      finally 
      { 
       if (cur != null) 
       { 
        cur.close(); 
       } 
      } 

écrire ce code dans votre bouton enregistrer l'événement et cela fonctionnera, ils sont comme vous recherche

+0

Cette réponse est utile pour créer un événement sans intention.Il va créer le calendrier de l'appareil actuel de l'événement.Merci @Naval Kishor Jha. – YBDevi