Jump to content

Faire quelque chose quand la batterie est à un certain pourcentage ?


Krimlin

Recommended Posts

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 :)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

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 by Krimlin
Link to comment
Share on other sites

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 by Guest
Link to comment
Share on other sites

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 ;)

Link to comment
Share on other sites

@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 ;)

Link to comment
Share on other sites

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 by Krimlin
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...