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 :

Widget & Préférences


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Informaticien - Profesionnal master application development
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien - Profesionnal master application development
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut Widget & Préférences
    Bonjour à tous,

    Je développe actuellement une application où entre autre l'utilisateur entre la date à laquelle il arrête de fumer et en fonction du jours/heure/minute actuel, celà lui renvoit des informations tels que l'argent économisé etc..

    J'ai déja implémenter tous celà au sein d'une activité et ça marche très bien, maintenant je désire faire pareil avec un widget mais c'est mon tout premier widget et j'avoue ne pas trop m'en sortir.

    Je ne sais pas très bien où placer mon code entre onEnabled(), onUpdate etc, alors pour le moment j'ai 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
    public class elloWorldWidgetActivity extends AppWidgetProvider {
     
    	TextView txtDateStopFumer;
        TextView resultatJoursSansFumer;
        TextView resultatCigNonFume;
        TextView resultatEconomie;
        TextView resultatTempsGagne;
     
        // get the current date        
        final Calendar c = Calendar.getInstance();        
        int AjdAnnee = c.get(Calendar.YEAR);        
        int AjdMois = c.get(Calendar.MONTH);        
        int AjdJour = c.get(Calendar.DAY_OF_MONTH);
        int AjdHeure = c.get(Calendar.HOUR_OF_DAY);
        double AjdMinute = c.get(Calendar.MINUTE);
     
     
        	SharedPreferences Preferences = PreferenceManager.getDefaultSharedPreferences(this);
     
            String StopAnnee_String = Preferences.getString("StopAnnee", "0");
            String StopMois_String = Preferences.getString("StopMois", "0");
            String StopJour_String = Preferences.getString("StopJour", "0");
     
            int stopAnnee = Integer.parseInt(StopAnnee_String);
            int stopMois = Integer.parseInt(StopMois_String);
            int stopJour = Integer.parseInt(StopJour_String);
    Ici je souhaite donc récupéré la date, heure, minute actuelle et la date à laquelle l'utilisateur arrête de fumer que j'ai stocké dans les préfécences (déja apperement " getDefaultSharedPreferences(this); " ne passe pas..)

    Ensuite dans onUpdate() j'ai mis 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
            @Override
            public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                    int[] appWidgetIds) {
     
            	AjdHeure = AjdHeure +1;
     
            	int NbrJourDebut = ((stopAnnee*365)+((stopMois+1)*30)+stopJour);
                int NbrJourAjd = ((AjdAnnee*365)+((AjdMois+1)*30)+AjdJour);
     
     
                int NbrTotalJoursSansFumer = NbrJourAjd - NbrJourDebut;
                double NbrTotalJoursEtHeuresSansFumer = NbrTotalJoursSansFumer+((double)AjdHeure/24)+(((double)AjdMinute/60)/24);
                String NbrTotalJoursSansFumer_string = NumberFormat.getInstance().format(NbrTotalJoursEtHeuresSansFumer);
     
     
               RemoteViews updateViews = new RemoteViews(context.getPackageName(),R.layout.main_widget);
     
                updateViews.setTextColor(R.id.ResultJoursSansFumer, 0xFF000000);
                updateViews.setTextViewText(R.id.ResultJoursSansFumer, NbrTotalJoursSansFumer_string);
     
               ComponentName thisWidget = new ComponentName(context, elloWorldWidgetActivity.class);
                appWidgetManager.updateAppWidget(thisWidget, updateViews);
            }
    Normalement avec ceci, dans une simple activé celà marche très bien mais je craind qu'en l'occurence pour mon widget, tous ne soient pas codé dans les bonnes méthodes, si quelqu'un peut m'éclairer merci.

  2. #2
    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
    plusieurs commentaires....

    1. En Java les variables non finales / statiques commencent par une minuscule. Je sais on fait ce qu'on veut, mais c'est une habitude qui date de Java 1 et qui aide beaucoup les programmeurs à reconnaitre d'un coup d'oeil qui est quoi. Les noms qui commencent par une majuscule sont uniquement des TYPES (classes, interfaces, enums).

    2. Sur l'utilisation des dates... je comprends bien le but de tout le calcul... mais ceci est (à mon avis) plus interessant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // à faire dans le onUpdate()
    final static long MILLIS_IN_DAY = 24*60*60*1000;
     
    Calendar stopDate = Calendar.getInstance();
    stopDate.set(Calendar.YEAR, preferences.getInt("StopAnnee", 0));
    stopDate.set(Calendar.MONTH, preferences.getInt("StopMois", 0));
    stopDate.set(Calendar.DAY, preferences.getInt("StopJour", 1));
     
    long millisSinceStopped = System.currentTimeMillis() - stopDate.getTime().getTime();
    long daysSinceStopped = millisSinceStopped / MILLIS_IN_DAY;
    ...

    3. Je suis étonné que ca compile (avec "thisWidget" à la fin qui n'est défini nulle part). Pour chaque widgetId recu, il faut faire un appel à updateWidget().

    4. Quel est l'utilité de AdjHeure ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Informaticien - Profesionnal master application development
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien - Profesionnal master application development
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Merci pour ta réponse

    Je vais tâcher de nommer mes variables correctement, en industrie je le fais mais j'avoue être plus laxiste quand je développe chez moi..

    Ta méthode de calcul est en effet moin brouillon que celle que j'ai appliquer, je vais m'en inspirer pour la suite.

    AjdHeure ne sert concrétement à rien, j'aurai dû la supprimer avant de poster, c'est simplement mon émulateur qui à 1 heure de retard sur l'heure actuelle.

    Si tu pouvais m'indiquer si c'est bien dans onEnabled() que je dois déclarer mes variables, récupérer la date actuelle etc, et récupérer mes préférence ?

    Sachant qu'un message d'erreur m'indique que getDefaultSharedPreferences(Context) pour le type PreferenceManager n'est pas applicable pour les arguments " nom de l'activité "..

    Deuxiemement, est-ce bien dans onUpdate que je dois mettre mes calculs ?
    (ceux que tu as cité)

    Il me semble que si je souhaite que les données renvoyées à l'UI (widget) soient dynamique en fonction de l'heure actuelle,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    final Calendar c = Calendar.getInstance();        
        int AjdAnnee = c.get(Calendar.YEAR);        
        int AjdMois = c.get(Calendar.MONTH);        
        int AjdJour = c.get(Calendar.DAY_OF_MONTH);
        int AjdHeure = c.get(Calendar.HOUR_OF_DAY);
        double AjdMinute = c.get(Calendar.MINUTE);
    devrait se trouver également dans onUpdate() non ?

    Je le répète je suis néophyte en terme de widget et plus généralement novice en android

  4. #4
    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
    Oui oui onUpdate doit se charger de tout, *sauf* si le traitement est long...
    onUpdate est appelé dans un thread d'UI (l'UI du bureau), et tout traitement long est sujet susceptible de forcer le widget a être fermé. Dans ce cas, passer par un service, et utiliser onUpdate comme déclencheur du service.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Informaticien - Profesionnal master application development
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien - Profesionnal master application development
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    D'accord je vais esseiller d'implémenter celà demain, si je te tiens au courant. merci

Discussions similaires

  1. [SWT]Eclipse Java : swt.widgets.Table
    Par watson dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 01/10/2003, 09h07

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