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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut Android : Calendar intent dans Boucle for ne prend que le dernier enregistrement pour créer l'évènement Agenda
    Bonjour,

    J'ai développé mon application RappelAgenda en y créant un bouton dans mon layout :

    Code XML : 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
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.rappelagenda.MainActivity" >
     
       <Button
            android:id="@+id/CalendarButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="114dp"
            android:text="@string/CalendarButton" />
     
    </RelativeLayout>

    afin qu'un clic sur celui-ci génère autant d'évènements dans l'application Agenda d'Android (ici 3 !) :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    package com.example.rappelagenda;
     
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TimeZone;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.provider.CalendarContract;
    import android.provider.CalendarContract.Events;
    import android.view.View;
    import android.widget.Button;
     
     
    public class MainActivity extends Activity {
     
    	static Context mContext;
    	Button buttonCharg;
    	int dMonth = Calendar.MONTH-1;//month(0 to 11)
    	int dDay = Calendar.DAY_OF_WEEK_IN_MONTH;
    	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    	Date dDate = new Date(cal.getTimeInMillis());
    	int dYear = dDate.getYear() + 1900; //depreciated
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MainActivity.mContext = getApplicationContext();
            setContentView(R.layout.activity_main);
     
            buttonCharg = (Button)findViewById(R.id.CalendarButton);
     
            buttonCharg.setOnClickListener(new View.OnClickListener() {
     
            	 @Override
            	 public void onClick(View v) {
     
            		 addEvent();
            	 }
            	 });
        }	
     
        private void addEvent()
        {
     
        	Calendar cal1 = Calendar.getInstance();
        	cal1.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal1.set(Calendar.MINUTE, 0);// for 0 min
            cal1.set(Calendar.SECOND, 0);// for 0 sec
            cal1.set(dYear, 03-1, 05);// for Date [year,month(0 to 11), date]
     
        	Calendar cal2 = Calendar.getInstance();
        	cal2.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal2.set(Calendar.MINUTE, 0);// for 0 min
            cal2.set(Calendar.SECOND, 0);// for 0 sec
            cal2.set(dYear, 04-1, 13);// for Date [year,month(0 to 11), date]
     
        	Calendar cal3 = Calendar.getInstance();
        	cal3.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal3.set(Calendar.MINUTE, 0);// for 0 min
            cal3.set(Calendar.SECOND, 0);// for 0 sec
            cal3.set(dYear, 05-1, 10);// for Date [year,month(0 to 11), date]
     
     
            Date dDay01 = new Date(cal1.getTimeInMillis());// calendar gives long value
            Date dDay02 = new Date(cal2.getTimeInMillis());// calendar gives long value
            Date dDay03 = new Date(cal3.getTimeInMillis());// calendar gives long value   	
     
            Date[] Dates = { dDay01, dDay02, dDay03 };
     
            String txt01 = "01 MARS 2022 : DENTISTE";
            String txt02 = "01 AVRIL 2022 : COIFFEUR";
            String txt03 = "01 MAI 2022 : MEDECIN";
     
            String[] txt = { txt01, txt02, txt03 };
     
            int i;
            int l = Dates.length;
     
            for (i = 0; i < l; i++)
            {
     
                Intent intent = new Intent(Intent.ACTION_INSERT);
                intent.setData(Events.CONTENT_URI)
                .setType("vnd.android.cursor.item/event")
                .putExtra(Events.CALENDAR_ID, "1")//Default calendar
                .putExtra(Events.TITLE, txt[i])
                .putExtra(Events.ALL_DAY, true)
                .putExtra(Events.EVENT_TIMEZONE, TimeZone.LONG)
                .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, Dates[i].getTime())
                .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, Dates[i].getTime()+60*60);
     
                startActivity(intent);
     
            }
        }    
     
    }
    Le problème est que bien que l'activité agenda démarre, l'évènement à ajouter affiché est le dernier enregistrement de Date[] et String[].

    Je ne comprends pas pourquoi les deux premiers enregistrements ne s'affichent pas via la boucle for (ils doivent être écrasés par le dernier ?).

    Pouvez-vous m'aider à y voir plus clair ?

    D'avance merci

  2. #2
    Membre éprouvé Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Points : 1 014
    Points
    1 014
    Par défaut


    Tu fais ton startActivity() dans ta boucle, alors qu'il faudrait le faire en dehors.
    Du coup actuellement tu lance 3 fois ton activity, et à chaque fois avec un seul evenement dans les extras.
    "On sera toujours mieux installé assis en 1ère que debout en 2nde", un illustre inconnu


    Avant de poser une question vérifiez si elle n'a pas déjà une réponse dans les cours et tutoriels
    Si votre problème est pensez à marquer la conversation comme telle
    Si un message est utile, pertinent, et/ou vous êtes d'accord avec, pensez à à l'inverse s'il est inutile, faux ou que vous n'êtes pas d'accord, pensez à

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Merci et bonsoir Drowan,

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    package com.example.rappelagenda;
     
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TimeZone;
     
    import android.app.Activity;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.provider.CalendarContract;
    import android.provider.CalendarContract.Events;
    import android.view.View;
    import android.widget.Button;
     
     
    public class MainActivity extends Activity {
     
    	static Context mContext;
    	Button buttonCharg;
    	int dMonth = Calendar.MONTH-1;//month(0 to 11)
    	int dDay = Calendar.DAY_OF_WEEK_IN_MONTH;
    	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    	Date dDate = new Date(cal.getTimeInMillis());
    	int dYear = dDate.getYear() + 1900; //depreciated
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MainActivity.mContext = getApplicationContext();
            setContentView(R.layout.activity_main);
     
            buttonCharg = (Button)findViewById(R.id.CalendarButton);
     
            buttonCharg.setOnClickListener(new View.OnClickListener() {
     
            	 @Override
            	 public void onClick(View v) {
     
            		 addEvent();
            	 }
            	 });
        }	
     
        private void addEvent()
        {
     
        	Calendar cal1 = Calendar.getInstance();
        	cal1.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal1.set(Calendar.MINUTE, 0);// for 0 min
            cal1.set(Calendar.SECOND, 0);// for 0 sec
            cal1.set(dYear, 03-1, 05);// for Date [year,month(0 to 11), date]
     
        	Calendar cal2 = Calendar.getInstance();
        	cal2.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal2.set(Calendar.MINUTE, 0);// for 0 min
            cal2.set(Calendar.SECOND, 0);// for 0 sec
            cal2.set(dYear, 04-1, 13);// for Date [year,month(0 to 11), date]
     
        	Calendar cal3 = Calendar.getInstance();
        	cal3.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal3.set(Calendar.MINUTE, 0);// for 0 min
            cal3.set(Calendar.SECOND, 0);// for 0 sec
            cal3.set(dYear, 05-1, 10);// for Date [year,month(0 to 11), date]
     
     
            Date dDay01 = new Date(cal1.getTimeInMillis());// calendar gives long value
            Date dDay02 = new Date(cal2.getTimeInMillis());// calendar gives long value
            Date dDay03 = new Date(cal3.getTimeInMillis());// calendar gives long value   	
     
            Date[] Dates = { dDay01, dDay02, dDay03 };
     
            String txt01 = "01 MARS 2022 : DENTISTE";
            String txt02 = "01 AVRIL 2022 : COIFFEUR";
            String txt03 = "01 MAI 2022 : MEDECIN";
     
            String[] txt = { txt01, txt02, txt03 };
     
            int i;
            int j;
            int l = Dates.length;
            Intent[] intent = {new Intent(Intent.ACTION_INSERT),new Intent(Intent.ACTION_INSERT),new Intent(Intent.ACTION_INSERT)};
     
            for (i = 0; i < l; i++)
            {
     
                intent[i].setData(Events.CONTENT_URI)
                .setType("vnd.android.cursor.item/event")
                .putExtra(Events.CALENDAR_ID, "1")//Default calendar
                .putExtra(Events.TITLE, txt[i])
                .putExtra(Events.ALL_DAY, true)
                .putExtra(Events.EVENT_TIMEZONE, TimeZone.LONG)
                .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, Dates[i].getTime())
                .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, Dates[i].getTime()+60*60);
     
     
            }
     
            for (j=0; j > l; j++)
            {
            	startActivity(intent[j]);
            }
        }    
     
    }
    Il faut voir dans cette direction là ?

    Je ne sais pas comment faire pour sortir l'Activité de la boucle.

    Merci pour ton aide.

  4. #4
    Membre éprouvé Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Points : 1 014
    Points
    1 014
    Par défaut
    Au temps pour moi, j'ai lu un peu vite et j'ai pas été clair.

    Si tu fais plusieurs appels à startActivity() tu vas ouvrir plusieurs activity les unes par dessus les autres. Mais dans ton cas, comme tu rappelles la même activity plusieurs fois, tu vas "fermer" l'instance précédente et "ouvrir" une nouvelle instance. (je mets entre guillemets car c'est plus compliqué que ouvrir/fermer mais c'est pour représenter plus simplement ce qu'il se passe).
    Donc quand tu appelles startActivity(intent[j]); avec j=3, cela ferme le calendrier qui insert l'event 2 pour ouvrir le calendrier qui insert l'event 3.

    Donc dans ton cas, il ne faudrait appeler qu'une seule fois startActivity (et donc qu'un seul Intent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setData(Events.CONTENT_URI)
    for (i = 0; i < l; i++) {
        intent.setType("vnd.android.cursor.item/event")
        .putExtra(Events.CALENDAR_ID, "1")//Default calendar
        .putExtra(Events.TITLE, txt[i])
        .putExtra(Events.ALL_DAY, true)
        .putExtra(Events.EVENT_TIMEZONE, TimeZone.LONG)
        .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, Dates[i].getTime())
        .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, Dates[i].getTime()+60*60);
     
    }
    startActivity(intent);
    Il y a peut-être un problème (il faudra tester),je ne suis pas sûr que l'application Calendar va réussir à "démêler" toutes les données en Extra pour en déduire les 3 Events à insérer.



    EDIT :
    Je viens d'y penser. Si le fait de tout mettre en un seul coup ne marche pas, la solution sera de faire 1 par 1.
    C'est à dire attendre le statut retour de l'ajout de l'event 1, avant d'appeler à nouveau startActivity() avec l'event 2.
    "On sera toujours mieux installé assis en 1ère que debout en 2nde", un illustre inconnu


    Avant de poser une question vérifiez si elle n'a pas déjà une réponse dans les cours et tutoriels
    Si votre problème est pensez à marquer la conversation comme telle
    Si un message est utile, pertinent, et/ou vous êtes d'accord avec, pensez à à l'inverse s'il est inutile, faux ou que vous n'êtes pas d'accord, pensez à

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Merci pour ta réponse Drowan.

    En effectuant les tâches une à une à la suite les unes des autres, au clic du bouton, les activités s'empilent et l'agenda n'affiche que la dernière comme dans la boucle for.

    Le seul moyen est comme tu le dis : "attendre le statut retour de l'ajout de l'event 1, avant d'appeler à nouveau startActivity() avec l'event 2"

    J'ai essayé avec startActivityForResults(intent, -1) / setResult(RESULT_OK, intent) / finish().

    Mais je ne sais pas si cela est la solution et si ce sont les procédures de retour de l'Event ni dans quel ordre il faut les mettre.

    Merci d'avance de ton aide

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    J'ai effectué plusieurs recherches sur internet au sujet du démarrage de l'intent dans une activité affichant l'Agenda.

    Il en résulte que l'on ne peut en lancer qu'une seule. D'où l'écrasement des 3 enregistrements de ma boucle for.
    En ce qui concerne une valeur de retour cela semble possible en envoyant un extra d'une activité à l'autre. Comme l'activité Agenda est une activité native, nous ne pouvons pas contrôler, à mon avis, son retour.

    En revanche, j'ai trouvé une autre méthode afin d'ajouter des évènements dans l'Agenda sans lancer l'Agenda mais cela ne créé pas les 3 évènements après clic sur le bouton :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    package com.example.rappelagenda;
     
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TimeZone;
     
    import android.app.Activity;
    import android.content.AsyncQueryHandler;
    import android.content.ContentValues;
    import android.content.Context;
    import android.os.Bundle;
    import android.provider.CalendarContract.Events;
    import android.view.View;
    import android.widget.Button;
     
     
    public class MainActivity extends Activity {
     
    	static Context mContext;
    	Button buttonCharg;
    	int dMonth = Calendar.MONTH-1;//month(0 to 11)
    	int dDay = Calendar.DAY_OF_WEEK_IN_MONTH;
    	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    	Date dDate = new Date(cal.getTimeInMillis());
    	int dYear = dDate.getYear() + 1900; //depreciated
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MainActivity.mContext = getApplicationContext();
            setContentView(R.layout.activity_main);
     
            buttonCharg = (Button)findViewById(R.id.CalendarButton);
     
            buttonCharg.setOnClickListener(new View.OnClickListener() {
     
            	 @Override
            	 public void onClick(View v) {
     
            		 addEvent();
            	 }
            	 });
        }	
     
        private void addEvent()
        {
        	AsyncQueryHandler handler = new AsyncQueryHandler(mContext.getContentResolver()) {
            };
     
        	Calendar cal1 = Calendar.getInstance();
        	cal1.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal1.set(Calendar.MINUTE, 0);// for 0 min
            cal1.set(Calendar.SECOND, 0);// for 0 sec
            cal1.set(dYear, 03-1, 1);// for Date [year,month(0 to 11), date]
     
        	Calendar cal2 = Calendar.getInstance();
        	cal2.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal2.set(Calendar.MINUTE, 0);// for 0 min
            cal2.set(Calendar.SECOND, 0);// for 0 sec
            cal2.set(dYear, 04-1, 1);// for Date [year,month(0 to 11), date]
     
        	Calendar cal3 = Calendar.getInstance();
        	cal3.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal3.set(Calendar.MINUTE, 0);// for 0 min
            cal3.set(Calendar.SECOND, 0);// for 0 sec
            cal3.set(dYear, 05-1, 1);// for Date [year,month(0 to 11), date]
     
     
            Date dDay01 = new Date(cal1.getTimeInMillis());// calendar gives long value
            Date dDay02 = new Date(cal2.getTimeInMillis());// calendar gives long value
            Date dDay03 = new Date(cal3.getTimeInMillis());// calendar gives long value   	
     
            Date[] Dates = { dDay01, dDay02, dDay03 };
     
            String txt01 = "01 MARS 2022 : DENTISTE";
            String txt02 = "01 AVRIL 2022 : COIFFEUR";
            String txt03 = "01 MAI 2022 : MEDECIN";
     
            String[] txt = { txt01, txt02, txt03 };
     
            int i;
            int l = Dates.length;
     
            for (i = 0; i < l; i++)
            {
     
            	ContentValues values = new ContentValues();
            	values.put(Events.DTSTART, Dates[i].getTime());
            	values.put(Events.DTEND, Dates[i].getTime()+60*60);
            	values.put(Events.TITLE, txt[i]);
            	values.put(Events.CALENDAR_ID, 4);
            	values.put(Events.EVENT_TIMEZONE, "France/Paris");
     
            	handler.startInsert(0, null, Events.CONTENT_URI, values);
     
            }
     
        }    
     
    }
    La tâche AsyncQueryHandler s'exécute en arrière plan et permettrait de suivre la boucle (contrairement au lancement de l'activité via l'intent).

    Le problème est que les évènements ne s'enregistrent pas. J'ai utilisé le bon calendar_ID.

    Avez-vous plus de compréhension sur ce phénomène ?

    D'avance merci

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    La console LogCat affiche cela :

    E/MultiWindowProxy(6275): getServiceInstance failed!

    Je reste bloqué !

    Avez-vous une idée ?

    Merci d'avance

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Drowan Voir le message
    Au temps pour moi, j'ai lu un peu vite et j'ai pas été clair.

    Si tu fais plusieurs appels à startActivity() tu vas ouvrir plusieurs activity les unes par dessus les autres. Mais dans ton cas, comme tu rappelles la même activity plusieurs fois, tu vas "fermer" l'instance précédente et "ouvrir" une nouvelle instance. (je mets entre guillemets car c'est plus compliqué que ouvrir/fermer mais c'est pour représenter plus simplement ce qu'il se passe).
    Donc quand tu appelles startActivity(intent[j]); avec j=3, cela ferme le calendrier qui insert l'event 2 pour ouvrir le calendrier qui insert l'event 3.

    Donc dans ton cas, il ne faudrait appeler qu'une seule fois startActivity (et donc qu'un seul Intent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setData(Events.CONTENT_URI)
    for (i = 0; i < l; i++) {
        intent.setType("vnd.android.cursor.item/event")
        .putExtra(Events.CALENDAR_ID, "1")//Default calendar
        .putExtra(Events.TITLE, txt[i])
        .putExtra(Events.ALL_DAY, true)
        .putExtra(Events.EVENT_TIMEZONE, TimeZone.LONG)
        .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, Dates[i].getTime())
        .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, Dates[i].getTime()+60*60);
     
    }
    startActivity(intent);
    Il y a peut-être un problème (il faudra tester),je ne suis pas sûr que l'application Calendar va réussir à "démêler" toutes les données en Extra pour en déduire les 3 Events à insérer.



    EDIT :
    Je viens d'y penser. Si le fait de tout mettre en un seul coup ne marche pas, la solution sera de faire 1 par 1.
    C'est à dire attendre le statut retour de l'ajout de l'event 1, avant d'appeler à nouveau startActivity() avec l'event 2.
    Bonjour Drowan,

    J'ai essayé ta technique mais seul le dernier event (Date du 1er mai 2022) est affiché écrasant les précédents :

    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
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setData(Events.CONTENT_URI)
    for (i = 0; i < l; i++) {
        intent.setType("vnd.android.cursor.item/event")
        .putExtra(Events.CALENDAR_ID, 4)//Default calendar
        .putExtra(Events.TITLE, txt[i])
        .putExtra(Events.ALL_DAY, true)
        .putExtra(Events.EVENT_TIMEZONE, TimeZone.LONG)
        .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, Dates[i].getTime())
        .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, Dates[i].getTime()+60*60);
     
    }
    startActivityForResult(intent, 1); //REQUESTCODE;
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        	  super.onActivityResult(requestCode, resultCode, intent);
        	  if (resultCode  == RESULT_OK) {
        		  finish();
        	  }
        	}
    As-tu un moyen de résoudre le problème ?

    D'avance merci



    EDIT :
    Rien ne marche et aucun forum ne parle d'ajouter des events calendar avec une boucle for

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 61
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    J'ai résolu le problème avec ce code :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    package com.example.rappelagenda;
     
    import java.util.Calendar;
    import java.util.Date;
    import java.util.TimeZone;
     
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.CalendarContract;
    import android.provider.CalendarContract.Events;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
     
     
    public class MainActivity extends Activity {
     
    	static Context mContext;
    	Button buttonCharg;
    	int dMonth = Calendar.MONTH-1;//month(0 to 11)
    	int dDay = Calendar.DAY_OF_WEEK_IN_MONTH;
    	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
    	Date dDate = new Date(cal.getTimeInMillis());
    	int dYear = dDate.getYear() + 1900; //depreciated
            int i = 0;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            MainActivity.mContext = getApplicationContext();
            setContentView(R.layout.activity_main);
     
            buttonCharg = (Button)findViewById(R.id.CalendarButton);
     
            buttonCharg.setOnClickListener(new View.OnClickListener() {
     
            	 @Override
            	 public void onClick(View v) {
     
            		 addEvent();
            	 }
            	 });
        }	
     
        private void addEvent()
        {
     
        	Calendar cal1 = Calendar.getInstance();
        	cal1.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal1.set(Calendar.MINUTE, 0);// for 0 min
            cal1.set(Calendar.SECOND, 0);// for 0 sec
            cal1.set(dYear, 03-1, 1);// for Date [year,month(0 to 11), date]
     
        	Calendar cal2 = Calendar.getInstance();
        	cal2.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal2.set(Calendar.MINUTE, 0);// for 0 min
            cal2.set(Calendar.SECOND, 0);// for 0 sec
            cal2.set(dYear, 04-1, 1);// for Date [year,month(0 to 11), date]
     
        	Calendar cal3 = Calendar.getInstance();
        	cal3.set(Calendar.HOUR_OF_DAY, 0);// for 0 hour
            cal3.set(Calendar.MINUTE, 0);// for 0 min
            cal3.set(Calendar.SECOND, 0);// for 0 sec
            cal3.set(dYear, 05-1, 1);// for Date [year,month(0 to 11), date]
     
     
            Date dDay01 = new Date(cal1.getTimeInMillis());// calendar gives long value
            Date dDay02 = new Date(cal2.getTimeInMillis());// calendar gives long value
            Date dDay03 = new Date(cal3.getTimeInMillis());// calendar gives long value   	
     
            Date[] Dates = { dDay01, dDay02, dDay03 };
     
            String txt01 = "01 MARS 2022 : DENTISTE";
            String txt02 = "01 AVRIL 2022 : COIFFEUR";
            String txt03 = "01 MAI 2022 : MEDECIN";
     
            String[] txt = { txt01, txt02, txt03 };
     
            int l = Dates.length;
     
            if(i<l)
            {
        	Intent intent = new Intent(Intent.ACTION_INSERT);
            intent.setData(Events.CONTENT_URI);    	
     
            intent.setType("vnd.android.cursor.item/event")
                .putExtra(Events.CALENDAR_ID, getCalendarId(mContext))//Default calendar
                .putExtra(Events.TITLE, txt[i])
                .putExtra(Events.ALL_DAY, true)
                .putExtra(Events.EVENT_TIMEZONE, TimeZone.LONG)
                .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, Dates[i].getTime())
                .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, Dates[i].getTime()+60*60);
     
                startActivityForResult(intent, 1); //REQUESTCODE
            }
     
        }    
     
        private int getCalendarId(Context context){
     
        	  Cursor cursor = null;
        	  ContentResolver contentResolver = context.getContentResolver();
        	  Uri calendars = CalendarContract.Calendars.CONTENT_URI;
     
        	  String[] EVENT_PROJECTION = new String[] {
        	        CalendarContract.Calendars._ID,                           // 0
        	        CalendarContract.Calendars.ACCOUNT_NAME,                  // 1
        	        CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,         // 2
        	        CalendarContract.Calendars.OWNER_ACCOUNT,                 // 3
        	        CalendarContract.Calendars.IS_PRIMARY                     // 4
        	};
     
        	  int PROJECTION_ID_INDEX = 0;
        	  int PROJECTION_ACCOUNT_NAME_INDEX = 1;
        	  int PROJECTION_DISPLAY_NAME_INDEX = 2;
        	  int PROJECTION_OWNER_ACCOUNT_INDEX = 3;
        	  int PROJECTION_VISIBLE = 4;
     
        	  cursor = contentResolver.query(calendars, EVENT_PROJECTION, null, null, null);
     
        	  if (cursor.moveToFirst()) {
        	    String calName;
        	    long calId = 0;
        	    String visible;
     
        	    do {
        	        calName = cursor.getString(PROJECTION_DISPLAY_NAME_INDEX);
        	        calId = cursor.getLong(PROJECTION_ID_INDEX);
        	        visible = cursor.getString(PROJECTION_VISIBLE);
        	        if(visible.equals("1")){
        	            return (int)calId;
        	        }
        	    } while (cursor.moveToNext());
     
        	    return (int)calId;
        	  }
        	  return 1;
        	}
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        	  super.onActivityResult(requestCode, resultCode, intent);
        	  if (resultCode  == RESULT_CANCELED) {
        		  i++;
        		  addEvent();
        	  }
        	}
     
    }
    Mais il faut quitter l'Agenda à chaque enregistrement pour lancer le suivant.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 15/09/2006, 19h08
  2. [débutant] Pb dans boucle For
    Par Sam 069 dans le forum Access
    Réponses: 2
    Dernier message: 11/09/2006, 13h10
  3. Réponses: 3
    Dernier message: 04/08/2006, 19h24
  4. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 09h31
  5. [JLabel] JLabel dans boucle for
    Par clairenes dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 06/01/2006, 00h47

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