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 :

AppWidget, niveau de batterie et intent


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de IsiTech
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut AppWidget, niveau de batterie et intent
    Bonjour,

    Je débute en programmation Android et pour m’entraîner je souhaite créer un widget simple qui affiche le niveau de batterie sous forme décimale dans un TextView. Je décris rapidement mon raisonnement (Corrigez moi si je me trompe), et je mets mon code à la fin.

    - onUpdate() ne se mets à jour que toutes les 30 minutes minimum, hors j'aimerais une mise à jour plus régulière. Je me suis donc tourné vers onReceive() avec un IntentFilter(Intent.ACTION_BATTERY_CHANGED). J'ai mis le temps de rafraîchissement à 0 pour que l'AppWidget ne soit pas màj avec onUpdate(), et j'ai déclaré mon AppWidget comme receiver dans la méthode onUpdate() qui n'est appelée qu'à la création de l'AppWidget.

    Maintenant, les problèmes : dans onUpdate j'utilise this.registerReceiver, qui demande un BroadcastReceiver. Or je ne vois pas comment en obtenir un. De plus j'aimerais pouvoir récupérer le niveau de batterie à la création de l'AppWidget afin qu'il affiche immédiatement la bonne valeur. Or il me faut un Intent, et encore une fois je ne vois pas comment en obtenir un dans onUpdate(). A moins que onReceive() reçoive automatiquement une valeur lorsqu'on enregistre l'AppWidget comme receiver et initialise donc la valeur?

    Ça fait maintenant plusieurs jours que je retourne le problème dans tous les sens mais je n'arrive à rien. J'ai d'autres problèmes ensuite, mais je m'intéresse surtout à la mise à jour de la valeur pour le moment. Est ce que je m'y prend mal peut être?

    Merci pour votre aide.



    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
    package com.IsiTech.WidgetBattery;
     
    import android.appwidget.AppWidgetManager;
    import android.appwidget.AppWidgetProvider;
    import android.content.Context;
    import android.content.Intent;
    import android.content.IntentFilter;
    import android.os.BatteryManager;
    import android.widget.RemoteViews;
    import android.widget.TextView;
     
    public class WidgetBatteryActivity extends AppWidgetProvider {
    	static short batteryLevel = 50;
     
    	//Uniquement à la création de l'AppWidget
    	@Override
    	public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 
    	{
    		 this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
     
    		//On mets à jour le niveau de la batterie
    		updateBattery();	//Besoin d'un Intent
     
    		//On mets à jour les widgets
    		updateAppWidgets(context, appWidgetManager, appWidgetIds);
    	}
     
    	//Lorsque l'AppWidget reçoit une notification
       	@Override
       	public void onReceive(Context context, Intent intent) {
       		updateBattery(intent);
     
       		batteryLevelTextView.setText(batteryLevel);
       	}
     
    	/**
             * Mets à jour les AppWidgets
             * @param context
             * @param appWidgetManager
             * @param appWidgetIds
             */
    	private static void updateAppWidgets(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    		final int N = appWidgetIds.length;
     
    		// Pour chaque AppWidget
    		for (int i = 0; i < N; i++) 
    		{
    			int appWidgetId = appWidgetIds[i];
    			updateAppWidget(context, appWidgetManager, appWidgetId);
    		}
    	}
     
    	/**
             * Mets à jour un AppWidget
             * @param context
             * @param appWidgetManager
             * @param appWidgetId
             */
    	private static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) 
    	{	
    		// On récupère les Views de notre layout
    		RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_battery);
     
    		// Mise à jour du TextView
    		String str = String.valueOf(batteryLevel);
    		views.setTextViewText(R.id.battery_level, str);
     
    		// Mise à jour de l'affichage
    		appWidgetManager.updateAppWidget(appWidgetId, views);
    	}
     
    	/**
             * Récupère le niveau de la batterie et mets à jour l'objet
             * @param intent
             */
            private static void updateBattery(Intent intent) {
        	batteryLevel = (short) intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
        }
    }

  2. #2
    Membre confirmé Avatar de IsiTech
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Janvier 2012
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 105
    Par défaut
    Après beaucoup de recherches et de galères, j'ai fini par trouver le code source d'un AppWidget basique affichant le niveau de batterie et la température. Je l'étudie pour mieux comprendre et ça répond à mes questions. Je mets le lien au cas où quelqu'un soit intéressé.

    https://github.com/hmrocha/batterywidget

    Merci à ceux qui m'ont lu.

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

Discussions similaires

  1. Lecture WMI niveau de batterie
    Par logic-steph dans le forum VB.NET
    Réponses: 14
    Dernier message: 30/05/2013, 09h34
  2. récupérer & afficher le niveau de batterie d'un PC
    Par amine.gafsi dans le forum Général Java
    Réponses: 1
    Dernier message: 02/07/2012, 00h20
  3. Niveau de batterie
    Par kenitra-boulla dans le forum Java ME
    Réponses: 4
    Dernier message: 10/02/2012, 16h28
  4. Réponses: 0
    Dernier message: 06/08/2010, 12h55
  5. [Débutant] Récuperation du niveau de batterie
    Par Zucco dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 26/09/2007, 16h49

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