Krimlin Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 Salut à tous ! :) J'ai un petit soucis ! Dans mon application, je réalise une action quand la batterie est faible. Pour cela, j'ai fait un receiver qui recoit l'intent LOW_BATTERY et ensuite fait l'action. Seulement cet event je le recoit 3 fois (15%, 10%, et 5%) et je voudrais effectuer l'action seulement pour 10% (par exemple) Voici mon code : public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(ACTION_BATTERY_LOW)) { int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100); int percent = (level*100)/scale; if(percent == 10) { //Do Something } } } J'ai même essayer ca, au cas ou le pourcentage ne soit pas exact : if(percent > 8 && percent < 12) Rien à faire il ne rentre jamais dans la boucle et ne fait jamais mon action. Sauf si je ne précise pas le pourcentage. Est ce que quelqu'un à une idée ? Merci :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
majdus Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 quelques pistes :) 1- as tu essayer de regarder les valeurs de level, scale et percent dans les 3 cas! 2- à priori l'event qui t'interesse est toujours le second :) (15 -> 10 -> 5) tu peux par conséquent declencher ton action si nb_event == 2 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 25 avril 2012 Auteur Share Posté(e) 25 avril 2012 Merci pour ta réponse rapide ! 1-Non d'ailleurs je ne vois pas comment faire étant donné que je ne peut pas tester sur l'émulateur (il ne possède pas l'event LOW_BATTERY) 2- J'y ai pensé mais le problème c'est qu'une fois rechargé, quand on aura à nouveau l'évennement batterie faible, nb_event va continuer à s'incrémenter indéfiniment Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
majdus Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 1- il faut afficher ces valeurs dans ton logcat regarde ce tuto http://www.tutos-android.com/comprendre-corriger-erreurs-dans-votre-application-android Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 25 avril 2012 Auteur Share Posté(e) 25 avril 2012 Oui oui mais le truc c'est que justement je n'ai pas accès au logcat lorsque mon application tourne car je débugue sur mon portable, l'émulateur ne gérant pas l'intent que je teste. Après il reste la possibilité de tester sur un autre event avec l'émulateur, j'essaierais ce soir en rentrant... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
majdus Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 tu as toujour le logcat même sur ton téléphone tu lance bien l'appli à partire de eclipse? sinon tu peut toujour les afficher dans un dialog :) je supsonne que la valeur percent n'a rien à voir avec ce que tu attends! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 1- Si, meme en faisant tourner sur ton portable tu as acces au logcat (mais il faut lancer ton app en mode debug) 2- Essai plutot Intent.ACTION_BATTERY_CHANGED cf http://stackoverflow.com/questions/1805895/android-battery-in-sdk @majdus: si a priori percent est bien la valeur attendue ! ;-) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 25 avril 2012 Auteur Share Posté(e) 25 avril 2012 (modifié) Ah je ne savais pas qu'on pouvait débugguer directement sur son téléphone ! Mais c'est la que justement je suis confronté à un problème bien bête : Si le téléphone est branché il se recharge et je ne peut pas faire déclancher l'event ^^ Mais c'est vrai que c'est embettant de pas pouvoir savoir ce que vaut ce "percent" Je testerai ce soir avec un autre intent pour voir Sylvain j'y ai pensé à utiliser ACTION_BATTERY_CHANGED ne t'inquiètes pas ! Le problème c'est que cet intent contrairement au mien va constamment écouter la batterie est c'est très gourmant en ressource. Enfin je crois ? Modifié 25 avril 2012 par Krimlin Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 (modifié) Hum...Changed, ca doit changer ts les 1% donc pas sur que ca bouffe la batterie non ! (au pire ca déclenche 99 events sur 1 jour 2 jours... c'est rien comparé a tout ce qui tourne sur un portable) Sinon tu le déclenches que [color=red]qd[/color] tu as ton premier LOW, et tu le désactive [color=red]qd[/color] tu es a nouveau sur OK (ms bon c'est du bricolage pr pas grand chose je pense) En plus avec CHANGED tu peux tester (avec un autre %) ;-) PS: oui, maintenant que tu le sais (hors cas spéciaux), il FAUT bosser sur un device et pas sur l'émulateur (quoique maintenant il est bcp plus rapide je crois) NOTE pour l'event: tu parles "de constamment écouter la batterie"...en fait ca ne marche pas comme ca. Un event est "déclenché" lorsque la batterie perd 1%, et toi tu t'inscris juste pour le recevoir ! Je pense qu'il est déclenché "ds ts les cas". Modifié 25 avril 2012 par Invité Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 25 avril 2012 Auteur Share Posté(e) 25 avril 2012 Hum je te remercie c'est très instructif. En effet j'avais oublié le principe des intent. Ils sont effectivement lancés par le système quoi qu'il arrive. Au développeur de voir si il veut les utilisés pour faire quelque chose en effet. on ce soir je testerais tout ca et je vous tiendrez au courant ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bismuth76 Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 Plop ! Sinon, un petit billet très intéressant sur une méthode pour changer le niveau de batterie sur l'émulateur (et plein d'autre chose d'ailleurs :P) : http://www.stealthcopter.com/blog/2010/07/changing-the-battery-percentage-in-an-avd-android-virtual-device-emulator/ J'espère que ça pourra t'aider ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Invité Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 Très bon lien, merci !! :-) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sylvain-a Posté(e) 25 avril 2012 Share Posté(e) 25 avril 2012 Question bête mais as tu tenté de tester avec percent compris entre 0 et 1 (donc une condition a 0.08 && 0.12) Car bon, un pourcentage => x/100 => 0.x Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 25 avril 2012 Auteur Share Posté(e) 25 avril 2012 @Bismuth76 Yep je suis aussi tombé sur cet article il y a peu en faisant mes recherches :) Il y a pas mal de choses intéressantes à faire avec l'émulateur d'ailleurs. Malheureusement en changeant la batterie de cette facon ("power capacity x") il ne lance pas l'event "LOW_BATTERY" sauf quand on le met à 0 mais la il s'éteint et y'a tout qui plante haha :) Meme en mettant ("power status discharging") il ne se décharge pas :( Merci quand même ! @Sylvain-a Non j'ai pas encore tester cette méthode mais à priori le scale est toujours de 100 sur les devices android et je multiplie le level par 100 avant de le diviser par le scale donc ca devrait marcher. je testerais quand même au cas ou ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 25 avril 2012 Auteur Share Posté(e) 25 avril 2012 Effectivement lors de mes tests en débugage je m'apercois que "level" est toujours égal à -1 (valeur par défaut) Quelqu'un à t il une explication ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
majdus Posté(e) 26 avril 2012 Share Posté(e) 26 avril 2012 effectivement bizarre tu as bien un petit @Override avant ta méthode onReceive()! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Krimlin Posté(e) 26 avril 2012 Auteur Share Posté(e) 26 avril 2012 (modifié) Oui bien sur :) J'ai essayé encore hier soir une multitudes de facons mais rien à faire. La ou j'ai eu les meilleurs résultats c'est avec ce bout de code carrément dans mon Onreceive() : Intent batteryIntent = context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); int rawlevel = batteryIntent.getIntExtra("level", -1); double scale = batteryIntent.getIntExtra("scale", -1); double level = -1; if (rawlevel >= 0 && scale > 0) { level = (rawlevel*100) / scale; } Tiré de cette question : http://stackoverflow...ction-battery-c Et donc avec cette méthode : Pour les premiers tests j'ai pris la reception d'un sms pour déclancher le on receive (pour pouvoir débuguer) et la surprise ca marche je peux tester la valeur de level (ou de rawlevel c'est pareil) et ca marche impec avec le pourcentage que je souhaite. Puis j'ai voulu tester en condition réel avec mon évent de batterie faible et la bam, ca marche plus :( Ca me rend fou ! :/ Modifié 26 avril 2012 par Krimlin Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.