Vérifiez si l’appareil est branché

Mon application dispose d’un récepteur de diffusion pour écouter les modifications apscopes à ACTION_POWER_CONNECTED et, à son tour, afficher l’écran pour restr ACTION_POWER_CONNECTED .

Ce qui me manque, c’est la possibilité pour l’application de vérifier l’état de charge lors de sa première exécution. Quelqu’un peut-il m’aider s’il vous plaît avec le code pour vérifier manuellement l’état de charge?

Merci à CommonsWare voici le code que j’ai écrit.

 public class Power { public static boolean isConnected(Context context) { Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS; } } if (Power.isConnected(context)) { ... } 

ou la version Kotlin

 object Power { fun isConnected(context: Context): Boolean { val intent = context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED)) val plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) return plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS } } 

http://developer.android.com/training/monitoring-device-state/battery-monitoring.html

 public static boolean isPlugged(Context context) { boolean isPlugged= false; Intent intent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); isPlugged = plugged == BatteryManager.BATTERY_PLUGGED_AC || plugged == BatteryManager.BATTERY_PLUGGED_USB; if (VERSION.SDK_INT > VERSION_CODES.JELLY_BEAN) { isPlugged = isPlugged || plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS; } return isPlugged; } 

Une mise à jour mineure pour prendre en charge la recharge sans fil.

Appelez registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)) . Cela renverra une Intent comportant des BatteryManager définies sur BatteryManager pour vous indiquer si elle est connectée ou non.

Cela fonctionne car Intent.ACTION_BATTERY_CHANGED est une diffusion Intent.ACTION_BATTERY_CHANGED .

Votre réponse est dans la référence Android !

Voici le code exemple:

 // Are we charging / charged? int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 

Sur Android M +, vous pouvez utiliser le service getSystemService(BATTERY_SERVICE) via getSystemService(BATTERY_SERVICE) . Sur les appareils fonctionnant avant M, vous pouvez utiliser une diffusion persistante, comme mentionné par d’autres. Exemple:

 public static boolean isCharging(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { BatteryManager batteryManager = (BatteryManager) context.getSystemService(Context.BATTERY_SERVICE); return batteryManager.isCharging(); } else { IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent intent = context.registerReceiver(null, filter); int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); if (status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL) { return true; } } return false; } 

Un moyen simple consiste à utiliser un filtre d’intention ACTION_BATTERY_CHANGED

 public void checkBatteryState(View sender) { IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = registerReceiver(null, filter); int chargeState = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); Ssortingng strState; switch (chargeState) { case BatteryManager.BATTERY_STATUS_CHARGING: case BatteryManager.BATTERY_STATUS_FULL: strState = "charging"; break; default: strState = "not charging"; } TextView tv = (TextView) findViewById(R.id.textView); tv.setText(strState); } 

essaye ça:

 public class PowerConnectionReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter); int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; if (batteryStatus != null) { int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1); float batteryPct = level / (float) scale; } }//end onReceive }//end PowerConnectionReceiver 
 BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Ssortingng action = intent.getAction(); if(action.equalsIgnoreCase(ACTION_POWER_CONNECTED)) { if(chargerConnected != null ) { chargerConnected.setText("Cable Connected"); } if(chargerImage != null ) { chargerImage.setImageDrawable(getResources().getDrawable(R.drawable.usb)); } }else if(action.equalsIgnoreCase(ACTION_POWER_DISCONNECTED)) { if(chargerConnected != null ) { chargerConnected.setText("NOT CHARGE"); } if(chargerImage != null ) { chargerImage.setImageDrawable(getResources().getDrawable(R.drawable.battery_icon)); } try { Toast.makeText(context, "Power Cable Disconnected", Toast.LENGTH_SHORT).show(); }catch (Exception e){e.printStackTrace();} } } }; 

Il s’agit d’une intention délicate, vous n’avez pas besoin d’enregistrer un BroadcastReceiver – en appelant simplement registerReceiver en transmettant null en tant que récepteur comme indiqué dans l’extrait de code suivant, l’intention actuelle de l’état de la batterie est renvoyée. Vous pouvez transmettre un object BroadcastReceiver réel ici, mais nous traiterons les mises à jour dans une section ultérieure, ce n’est donc pas nécessaire.

 IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); Intent batteryStatus = context.registerReceiver(null, ifilter); 

Vous pouvez extraire à la fois l’état de charge actuel et, si l’appareil est en cours de chargement, s’il est chargé via un chargeur USB ou un chargeur secteur:

 // Are we charging / charged? int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; // How are we charging? int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 

BatteryManager diffuse une action chaque fois que l’appareil est connecté ou déconnecté de l’alimentation. Il est important de recevoir ces événements même lorsque votre application n’est pas en cours d’exécution, d’autant plus que ces événements doivent influencer la fréquence à laquelle vous démarrez votre application pour lancer une mise à jour en arrière-plan. définir les ACTION_POWER_CONNECTED et ACTION_POWER_DISCONNECTED dans un filtre d’intention.

       

Dans l’implémentation BroadcastReceiver associée, vous pouvez extraire l’état et la méthode de charge actuels, comme décrit à l’étape précédente.

 public class PowerConnectionReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; } }