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 :

Créer un calendrier synchronisé dans l'agenda


Sujet :

Android

  1. #1
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut Créer un calendrier synchronisé dans l'agenda
    Bonjour,
    J'ai quelques soucis pour créer un calendrier lié à un compte Google et qui soit normalement synchronisé.
    J'arrive à créer un calendrier lié au compte, mais seulement en local, ce qui m'ennuie pas mal !

    Voici en gros le code que j'aimerais utiliser mais qui ne fonctionne pas :

    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
    public static Uri createCalendarWithName(Context ctx, String name,String accountName,String accountType) 
    {
                Uri target = Uri.parse(CalendarContract.Calendars.CONTENT_URI.toString());
                target = target.buildUpon().appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, accountName)
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType).build();
     
                ContentValues values = new ContentValues();
                values.put(Calendars.ACCOUNT_NAME, accountName);
                values.put(Calendars.ACCOUNT_TYPE, "com.google");
                values.put(Calendars.NAME, name);
                values.put(Calendars.CALENDAR_DISPLAY_NAME, name);
                values.put(Calendars.CALENDAR_COLOR, 0x00FF00);
                values.put(Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
                values.put(Calendars.OWNER_ACCOUNT, accountName);
                values.put(Calendars.VISIBLE, 1);
                values.put(Calendars.SYNC_EVENTS, 1);
                values.put(Calendars.CALENDAR_TIME_ZONE, "Europe/Rome");
     
                Uri newCalendar = ctx.getContentResolver().insert(target, values);
     
                return newCalendar;
        }
    accountName et accountType étant récupéré grâce à AccountManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AccountManager manager = AccountManager.get(context);
    Account[] accounts = manager.getAccountsByType("com.google");
    Lorsque j’exécute le code, je n'ai aucune erreur, newCalendar est bien rempli et je peux récupérer l'id du calendrier.
    Je peux aussi ajouter des événements dedans sans aucun soucis. Le problème, c'est que le calendrier (et du coup tout ce qu'il contient) est totalement invisible. C'est un peu comme si "je travaillais avec un calendrier que l'utilisateur n'a pas le droit de voir".

    La seule solution que j'ai supprime la synchronisation supposé avec le compte.
    Il faut pour cela que je change ACCOUNT_TYPE en TYPE_LOCAL (au lieu de "google.com" contenu dans la variable accountType) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Uri target = Uri.parse(CalendarContract.Calendars.CONTENT_URI.toString());
                target = target.buildUpon().appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, accountName)
                .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, Calendars.ACCOUNT_TYPE_LOCAL).build();

    En lisant la doc, on trouve :
    public static final String ACCOUNT_TYPE_LOCAL
    Added in API level 14 A special account type for calendars not associated with any account. Normally calendars that do not match an account on the device will be removed. Setting the account_type on a calendar to this will prevent it from being wiped if it does not match an existing account.
    See Also ACCOUNT_TYPE Constant Value: "LOCAL"
    Ce qui ressemble un peu à mon cas, mais pas totalement puisque le calendrier à l'air d'exister encore lorsque j'ajoute des événements.

    J'en viens donc à me poser la question, est ce que ce que je souhaite faire est réalisable ? Ou il n'est pas possible de faire ca ?
    Je ne trouve rien dans la doc disant si c'est possible ou non. Pourtant ca me semble être un peu le petit plus de l'agenda google sur un agenda lambda...

    Merci.
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

  2. #2
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut
    Bonjour,
    J'en suis venu à la conclusion que ce n'était pas possible, puisque je n'y arrive vraiment pas.

    Je déconseille assez fortement d'essayer de trop bidouiller avec cette api, certaine configurations rendent l'application Agenda inutilisable avec le compte Gmail concerné. (Désinstallation/Désynchronisation du compte/Reboot du tel/Reset du tel ne fonctionne pas).
    Je ne vais pas faire une critique complète de l'api, mais elle comporte quelques bugs assez agacent quand on souhaite quelques choses de précis; Je vous conseil de vous créer quelques comptes Gmail pour pouvoir reprendre de 0 et de prendre un téléphone que vous pouvez Reset sans rien perdre d'important. Si vous ne rendez pas votre agenda inutilisable vous aurez X calendrier ou événements impossible à supprimer.
    Bref, c'est un peu la merde après :p

    Je ne passe pas en résolu, car j’espère encore que quelqu'un pourra me prouver que c'est possible !
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

Discussions similaires

  1. Créer une entrée dans l'agenda de Lotus Notes depuis excel
    Par HERVE57 dans le forum Lotus Notes
    Réponses: 3
    Dernier message: 01/10/2012, 13h46
  2. Réponses: 3
    Dernier message: 31/08/2012, 10h48
  3. Réponses: 1
    Dernier message: 18/08/2012, 05h38
  4. Réponses: 2
    Dernier message: 13/12/2011, 11h58
  5. Comment créer un champs " BOOLEAN " dans ACCESS ?
    Par Didier100 dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/10/2004, 11h15

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