Krimlin Posted April 25, 2012 Share Posted April 25, 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 :) Quote Link to comment Share on other sites More sharing options...
majdus Posted April 25, 2012 Share Posted April 25, 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 Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 25, 2012 Author Share Posted April 25, 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 Quote Link to comment Share on other sites More sharing options...
majdus Posted April 25, 2012 Share Posted April 25, 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 Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 25, 2012 Author Share Posted April 25, 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... Quote Link to comment Share on other sites More sharing options...
majdus Posted April 25, 2012 Share Posted April 25, 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! Quote Link to comment Share on other sites More sharing options...
Guest Posted April 25, 2012 Share Posted April 25, 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 ! ;-) Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 25, 2012 Author Share Posted April 25, 2012 (edited) 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 ? Edited April 25, 2012 by Krimlin Quote Link to comment Share on other sites More sharing options...
Guest Posted April 25, 2012 Share Posted April 25, 2012 (edited) 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". Edited April 25, 2012 by Guest Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 25, 2012 Author Share Posted April 25, 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 ;) Quote Link to comment Share on other sites More sharing options...
Bismuth76 Posted April 25, 2012 Share Posted April 25, 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 ;) Quote Link to comment Share on other sites More sharing options...
Guest Posted April 25, 2012 Share Posted April 25, 2012 Très bon lien, merci !! :-) Quote Link to comment Share on other sites More sharing options...
Sylvain-a Posted April 25, 2012 Share Posted April 25, 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 Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 25, 2012 Author Share Posted April 25, 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 ;) Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 25, 2012 Author Share Posted April 25, 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 ? Quote Link to comment Share on other sites More sharing options...
majdus Posted April 26, 2012 Share Posted April 26, 2012 effectivement bizarre tu as bien un petit @Override avant ta méthode onReceive()! Quote Link to comment Share on other sites More sharing options...
Krimlin Posted April 26, 2012 Author Share Posted April 26, 2012 (edited) 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 ! :/ Edited April 26, 2012 by Krimlin Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.