IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Probléme implementation de fin d'événement dans un calendrier.


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Points : 96
    Points
    96
    Par défaut Probléme implementation de fin d'événement dans un calendrier.
    Bonjour,

    Voila plusieurs semaines que je tente de créer un événement dans le calendrier Google via mon application.

    J'arrive à créer l'événement à la bonne date et à la bonne heure. Le souci c'est que je n'arrive pas à afficher la bonne date et horaire de fin. Le plus "étrange" c'est que si j'active la fonction intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true); et qu'à la création de l'événement je « déclics » la fonction « journée entière » la bonne date et horaire de début et de fin s'affiche.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    String date = in4.getStringExtra(KEY_DATE);
    String date2 = in4.getStringExtra(KEY_DATE2);
     
    				SimpleDateFormat sdf = new SimpleDateFormat(
    						"yyyy-MM-dd HH:mm:ss");
    				SimpleDateFormat sdf2 = new SimpleDateFormat(
    						"yyyy-MM-dd HH:mm:ss");
     
     
    				Calendar c = Calendar.getInstance();
    				Calendar c2 = Calendar.getInstance();
     
    				try {
    					c.setTime(sdf.parse(date));
    					c2.setTime(sdf2.parse(date2));
    					System.out.println("String date:" + date);
    					System.out.println("String date2:" + date2);
    				} catch (java.text.ParseException e) {
    					// TODO Bloc catch généré automatiquement
    					e.printStackTrace();
    				}
     
     
    				if (Build.VERSION.SDK_INT >= 14) {
     
     
     
    	Intent intent8 = new Intent(Intent.ACTION_INSERT,Events.CONTENT_URI);
     
    			     intent8.setType("vnd.android.cursor.item/event");
    			     intent8.putExtra(Events.TITLE, name);
    			 intent8.putExtra(Events.EVENT_LOCATION, adresse2);
    		intent8.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
    							c.getTimeInMillis());
    		intent8.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, c2.getTimeInMillis());
     
     
    					//intent8.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
     
     
    					intent8.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
    					intent8.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
     
    					startActivity(intent8);
    Merci pour votre aide.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Bonjour,

    Avez vous essayer de rajouter cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    intent8.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, false);

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par David55 Voir le message
    Bonjour,

    Avez vous essayer de rajouter cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    intent8.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, false);
    Bonjour David55
    Merci pour votre réponse. Malheureusement j'ai bien essayé de rajouter cette ligne.

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    En faite le problème est que ta date de fin n'est pas le même jour que la date de début?

    Pour ajouter un événement d'une journée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Intent calIntent = new Intent(Intent.ACTION_INSERT);
    calIntent.setType("vnd.android.cursor.item/event");
    calIntent.putExtra(Events.TITLE, "My House Party");
    calIntent.putExtra(Events.EVENT_LOCATION, "My Beach House");
    calIntent.putExtra(Events.DESCRIPTION, "A Pig Roast on the Beach");
    GregorianCalendar calDate = new GregorianCalendar(2012, 7, 15);
    calIntent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
    calIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
         calDate.getTimeInMillis());
    calIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
         calDate.getTimeInMillis());
    startActivity(calIntent);
    Pour répéter l'événement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    calIntent.putExtra(Events.RRULE, “FREQ=WEEKLY;COUNT=10;WKST=SU;BYDAY=TU,TH”);

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par David55 Voir le message
    En faite le problème est que ta date de fin n'est pas le même jour que la date de début?
    Non mon problème et que je tente d'obtenir une date de début à "tel heure" et une date de fin à "tel autre heure". Le jour même ou bien "x" jours après( ex: du 24/11/2013 à 12h32 au 26/11/2013 à 11h01. Pour la date et l'heure de début de l'événement pas de souci. Par contre pour la fin de l'événement il me rajoute toujours une heure le même jour.

    Et le plus étrange c'est que lorsque je mais la fonction EXTRA_EVENT_ALL_DAY sur "true". Quand je lance l'"intent" pour créer l'événement la checkbox journée entière est coché. Si je la décoche j'obtiens la bonne date de fin de l'événement...

    Merci de votre aide.

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Points : 96
    Points
    96
    Par défaut
    Aprés des tests sur plusieurs téléphone. Ca marche trés bien sur les téléphones samsung (Le teos et le galaxy s3). Ca ne marche pas sur Htc one, Htc desire, Htc Desire Hd, Experia Z, et Nexus 4.

  7. #7
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    C'est très précis

    Vérifie la version d'Android de chaque smartphone.

  8. #8
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    La plupart des terminaux Samsung embarquent TouchWizz en surcouche. Je dirai que c'est grâce à elle que ça fonctionne et que ça ne devrait normalement pas fonctionner.

    Il te rajoute toujours une heure... serait-ce un problème de Locale ? Pour le voir, changer de fuseau horaire et retenter. Si problème de locale, le changement sera proportionnel au fuseau horaire.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Points : 96
    Points
    96
    Par défaut
    Marche aussi sur S4 donc sur plusieurs version d'android. Vu que je parse un string j'ai testé en changeant Local mais ca ne fait rien, la date de début est toujours la bonne, celle de fin une heure aprés. Pourquoi n'y a t il pas uniquement des samsung !

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    En fait, cela n'a rien à voir avec la locale... mais avec la TimeZone.... Sauf qu'on utilise des dates GMT dans le passage de paramètres...

    D'où viennent les chaines ?

    Essaye déjà de "cleanuper" le code.... On dirait qu'on a pas tout le code (ou qu'il y en a en trop au choix )
    Par exemple il y a deux SimpleDateFormat identiques... pourquoi ?
    Il y a une utilisation de "Calendar"... pourquoi ?
    Utiliser le LogCat.

    Le code posté revient à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    try {
        // utiliser des noms de variable qui veulent dire quelque chose
        String dateDebutStr = in4.getStringExtra(KEY_DATE);
        String dateFinStr = in4.getStringExtra(KEY_DATE2); 
        Log.v("MaFonction","Date-debut: '"+dateDebutStr+"', Date-Fin: '"+dateFinStr+"'");
     
        // static uniquement si le code est dans un seul thread comme l'UI... SimpleDateFormat n'étant pas réentrant
        static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     
        Date dateDebut = sdf.parse(dateDebutStr);
        Date dateFin = sdf.parse(dateFinStr); 
     
        Log.v("MaFonction","Debut: "+dateDebut +", Fin: '"+dateFin);
     
        if (Build.VERSION.SDK_INT >= 14) {
              Intent intent8 = new Intent(Intent.ACTION_INSERT,Events.CONTENT_URI);
              intent8.setType("vnd.android.cursor.item/event");
              intent8.putExtra(Events.TITLE, name);
              intent8.putExtra(Events.EVENT_LOCATION, adresse2);
              intent8.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
    							dateDebut.getTime());
              intent8.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, dateFin.getTime());
              intent8.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
              intent8.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
              startActivity(intent8);
        } 
        // sinon on fait quoi ? 
     
    } catch (Exception ex) {
         Log.e("MaFonction","Erreur de d'insertion d'évenement !",ex);
    }
    Déjà on devrait avoir du stuff interessant dans le logcat... il serait interessant de comparer les dates..
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 70
    Points : 96
    Points
    96
    Par défaut
    Citation Envoyé par nicroman Voir le message
    En fait, cela n'a rien à voir avec la locale... mais avec la TimeZone.... Sauf qu'on utilise des dates GMT dans le passage de paramètres...

    D'où viennent les chaines ?

    Essaye déjà de "cleanuper" le code.... On dirait qu'on a pas tout le code (ou qu'il y en a en trop au choix )
    Par exemple il y a deux SimpleDateFormat identiques... pourquoi ?
    Il y a une utilisation de "Calendar"... pourquoi ?
    Utiliser le LogCat.

    Le code posté revient à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    try {
        // utiliser des noms de variable qui veulent dire quelque chose
        String dateDebutStr = in4.getStringExtra(KEY_DATE);
        String dateFinStr = in4.getStringExtra(KEY_DATE2); 
        Log.v("MaFonction","Date-debut: '"+dateDebutStr+"', Date-Fin: '"+dateFinStr+"'");
     
        // static uniquement si le code est dans un seul thread comme l'UI... SimpleDateFormat n'étant pas réentrant
        static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     
        Date dateDebut = sdf.parse(dateDebutStr);
        Date dateFin = sdf.parse(dateFinStr); 
     
        Log.v("MaFonction","Debut: "+dateDebut +", Fin: '"+dateFin);
     
        if (Build.VERSION.SDK_INT >= 14) {
              Intent intent8 = new Intent(Intent.ACTION_INSERT,Events.CONTENT_URI);
              intent8.setType("vnd.android.cursor.item/event");
              intent8.putExtra(Events.TITLE, name);
              intent8.putExtra(Events.EVENT_LOCATION, adresse2);
              intent8.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
    							dateDebut.getTime());
              intent8.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, dateFin.getTime());
              intent8.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);
              intent8.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
              startActivity(intent8);
        } 
        // sinon on fait quoi ? 
     
    } catch (Exception ex) {
         Log.e("MaFonction","Erreur de d'insertion d'évenement !",ex);
    }
    Déjà on devrait avoir du stuff interessant dans le logcat... il serait interessant de comparer les dates..
    Dans le logcat les dates parser étaient bien les bonnes. Merci à tout le monde pour l'aide. J'ai enfin trouver une solution qui marche en ajoutant l'évenement directement dans le calendrier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Calendrier] un problème d'ajout d'un événement dans wdCalendar
    Par basboustunis dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 22/04/2014, 12h56
  2. Insérer un événement dans le calendrier avec > 2.1
    Par Sake_reflex dans le forum Android
    Réponses: 2
    Dernier message: 03/10/2011, 10h54
  3. Ajouter un événement dans le calendrier iPhone
    Par SebPolytech dans le forum Objective-C
    Réponses: 1
    Dernier message: 02/09/2011, 12h40
  4. Ajouter des évènements dans mon calendrier
    Par doncandid dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2011, 21h32
  5. Ajouter un évènement dans le calendrier
    Par Beetle dans le forum Android
    Réponses: 7
    Dernier message: 28/03/2011, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo