Aller au contenu

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

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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...

Lien vers le commentaire
Partager sur d’autres 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 ?

Modifié par Krimlin
Lien vers le commentaire
Partager sur d’autres 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".

Modifié par Invité
Lien vers le commentaire
Partager sur d’autres 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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres 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 ;)

Lien vers le commentaire
Partager sur d’autres 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 ! :/

Modifié par Krimlin
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...