2017-10-11 6 views
2

Je souhaite ajouter un événement dans le calendrier par programmation. J'utilise le code ci-dessous pour créer un événement de calendrier.L'ajout d'un événement au calendrier indique une date de fin erronée

Intent intent = new Intent(Intent.ACTION_EDIT); 
intent.setType("vnd.android.cursor.item/event"); 
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, DateUtils.getMiliseconds("10/10/2017", "09:02 AM"); 
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, DateUtils.getMiliseconds("10/13/2017", "05:02 PM")); 
intent.putExtra(CalendarContract.Events.TITLE, "my title"); 
intent.putExtra(CalendarContract.Events.EVENT_LOCATION, "my location"); 
startActivity(intent); 

Ici DateUtils.getMiliseconds est ma méthode ci-dessous. Ici, j'utilise la même méthode pour obtenir des millisecondes pour l'heure de début et l'heure de fin. J'obtiens l'heure correcte de début dans l'événement de calendrier en 10/10/2017 09:02. Mais l'heure de fin est 10/10/2017 10h02 au lieu du 13/10/2017 17h02.

J'ai essayé des solutions pour le disponible sur stackoverflow mais aucune des solutions ne fonctionne pour moi.

J'ai essayé aussi passer Events.DTSTART et Events.DTSTART au lieu de EXTRA_EVENT_BEGIN_TIME et EXTRA_EVENT_END_TIME mais il montre trop mauvaise date.

+0

J'ai utilisé Date today = new Date (getMiliseconds ("10/13/2017", "05:02 PM")); et il m'a donné une douceur Ven Oct 13 17:02:36 CEST 2017 imprimé sans problème du tout. (Eclipse Java IDE) – koksalb

+0

Confirmé: intention.putExtra (CalendarContract.EXTRA_EVENT_BEGIN_TIME, nouvelle date (getMiliseconds ("10/10/2017", "09:02 AM"))); intention.putExtra (CalendarContract.EXTRA_EVENT_END_TIME, nouvelle date (getMiliseconds ("10/13/2017", "05:02 PM"))); Fonctionne parfaitement bien et gère les intentions sans problème sur Android 5.x et 6.x (Android Studio IDE) résultat de l'intention: Bundle [{endTime = Fri Oct 13 17:02:17 GMT + 00: 00 2017, beginTime = Mar 10 Oct 09:02:17 GMT + 00: 00 2017, eventLocation = mon emplacement, title = mon titre}] – koksalb

+0

Cela fonctionne parfaitement bien sur la version 6.0 mais pas sur 5.1. Existe-t-il une solution à ça? @koksalb – Pooja

Répondre

1

Quand je lance votre méthode getMiliseconds, le temps en millisecondes Elle revient semble être correct. Cela ressemble à un problème où Google Agenda, où il ignore votre paramètre pour le endTime et en utilisant la valeur par défaut "startTime + 1 heure" comme la valeur endTime.

Consultez le suivi de ce numéro de Google: Google Calendar does not respect event start and end times received via intent. Il semble que le problème était dû à un bogue dans l'application calendrier de stock pour les appareils exécutant une version d'Android 5.0. Cela a fonctionné très bien pour Android 4.4.4.

Pour la plupart d'entre eux la mise à jour de l'application vers la dernière version a résolu le problème et pour d'autres la désinstallation des mises à jour pour l'application de calendrier sur votre téléphone l'a bien fait. Essayez les 2 options ci-dessus pour l'appareil sur lequel vous testez. J'espère que cela aide.

+0

Cela fonctionne parfaitement bien sur la version 6.0 mais pas sur 5.1. Existe-t-il une solution à ça? – Pooja

+0

Il y a une solution donnée mais je ne suis pas sûr que cela fonctionne. Ça vaut le coup. https://stackoverflow.com/a/21942177/1306419. Étant donné que cela semblait être un bogue du côté de l'application OS/Calendar, seule une mise à jour pouvait le réparer.Comme je l'ai dit dans la réponse, une chose à essayer est d'aller à l'info de l'application pour l'application 'Calendar', et de chercher l'option 'Uninstall Updates'. Ce sera soit un bouton ou sera dans les options du menu. Essayez et utilisez-le pour le faire fonctionner sur votre appareil. Si cela ne fonctionne pas, assurez-vous que votre application Calendrier est la plus récente et la plus à jour avec le magasin de jeux en espérant que cette version corrige le bogue. –

+0

Merci d'avoir signalé les problèmes. Je suppose que ré-installer le calendrier fonctionne. Je vais accepter votre réponse. – Pooja

0

au lieu de

Calendar cal1 = Calendar.getInstance(); 

Essayez-:

calendar = Calendar.getInstance(TimeZone.getDefault()); 

espère que cela aide

+0

Non. Toujours les mêmes résultats. – Pooja