android电量状态获取

一时失言乱红尘 2022-01-10 11:13 425阅读 0赞

public class OBatteryManager extends Manager {
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
private ArrayList mBatteryStatusListeners;

  1. public OBatteryManager(Config config) \{
  2. super(config);
  3. mBatteryStatusListeners = new ArrayList<>();
  4. \}
  5. public void addBatteryStatusListener(BatteryStatusListener listener) throws Exception \{
  6. for (BatteryStatusListener l : mBatteryStatusListeners) \{
  7. if (l == listener) \{
  8. throw new Exception("重复添加BatteryStatusListener!");
  9. \}
  10. \}
  11. mBatteryStatusListeners.add(listener);
  12. \}
  13. public void removeBatteryStatusListener(BatteryStatusListener listener) \{
  14. for (BatteryStatusListener l : mBatteryStatusListeners) \{
  15. if (l == listener) \{
  16. mBatteryStatusListeners.remove(l);
  17. \}
  18. \}
  19. \}
  20. /\*\*
  21. \* 电源Manager的注册(register)和注销(unregister())必须在App中成对使用,且只能成对使用一次。
  22. \*/
  23. public void register() \{
  24. IntentFilter intentFilter = new IntentFilter();
  25. intentFilter.addAction(Intent.ACTION\_BATTERY\_CHANGED);
  26. intentFilter.addAction(Intent.ACTION\_BATTERY\_LOW);
  27. intentFilter.addAction(Intent.ACTION\_BATTERY\_OKAY);
  28. intentFilter.addAction(Intent.ACTION\_POWER\_CONNECTED);
  29. intentFilter.addAction(Intent.ACTION\_POWER\_DISCONNECTED);
  30. intentFilter.addAction(BatteryManager.ACTION\_CHARGING);
  31. intentFilter.addAction(BatteryManager.ACTION\_DISCHARGING);
  32. mBatteryBroadcastReceiver = new BatteryBroadcastReceiver();
  33. SDKUtil.getAppContext().registerReceiver(mBatteryBroadcastReceiver, intentFilter);
  34. \}
  35. /\*\*
  36. \* 电源Manager的注册(register)和注销(unregister())必须在App中成对使用,且只能使用一次。
  37. \*/
  38. public void unregister() \{
  39. SDKUtil.getAppContext().unregisterReceiver(mBatteryBroadcastReceiver);
  40. \}
  41. /\*\*
  42. \* 监听电量变化的广播。
  43. \*/
  44. private class BatteryBroadcastReceiver extends BroadcastReceiver \{
  45. @Override
  46. public void onReceive(Context context, Intent intent) \{
  47. String action = intent.getAction();
  48. Detail detail = new Detail();
  49. switch (action) \{
  50. case BatteryManager.ACTION\_DISCHARGING:
  51. try \{
  52. detail.data().put(BatteryManager.ACTION\_DISCHARGING, intent.getBooleanExtra(BatteryManager.ACTION\_DISCHARGING, false));
  53. \} catch (Exception e) \{
  54. e.printStackTrace();
  55. \}
  56. break;
  57. case BatteryManager.ACTION\_CHARGING:
  58. try \{
  59. detail.data().put(BatteryManager.ACTION\_CHARGING, intent.getBooleanExtra(android.os.BatteryManager.ACTION\_CHARGING, false));
  60. \} catch (Exception e) \{
  61. e.printStackTrace();
  62. \}
  63. break;
  64. case Intent.ACTION\_BATTERY\_CHANGED:
  65. for (BatteryStatusListener listener : mBatteryStatusListeners) \{
  66. try \{
  67. extra(intent, detail);
  68. \} catch (Exception e) \{
  69. e.printStackTrace();
  70. \}
  71. listener.batteryChanged(detail);
  72. \}
  73. break;
  74. case Intent.ACTION\_BATTERY\_LOW:
  75. for (BatteryStatusListener listener : mBatteryStatusListeners) \{
  76. listener.batteryLow();
  77. \}
  78. break;
  79. case Intent.ACTION\_BATTERY\_OKAY:
  80. for (BatteryStatusListener listener : mBatteryStatusListeners) \{
  81. listener.batteryOkay();
  82. \}
  83. break;
  84. case Intent.ACTION\_POWER\_CONNECTED:
  85. for (BatteryStatusListener listener : mBatteryStatusListeners) \{
  86. listener.powerConnected();
  87. \}
  88. break;
  89. case Intent.ACTION\_POWER\_DISCONNECTED:
  90. for (BatteryStatusListener listener : mBatteryStatusListeners) \{
  91. listener.powerDisConnected();
  92. \}
  93. break;
  94. \}
  95. \}
  96. \}
  97. /\*\*
  98. \* 解析出更多电池信息装入Detail数据块中。
  99. \*
  100. \* @param intent
  101. \* @return
  102. \* @throws Exception
  103. \*/
  104. private Detail extra(Intent intent, Detail detail) throws Exception \{
  105. //获取电池所有的附加信息。
  106. Bundle extras = intent.getExtras();
  107. //获取当前电量
  108. int level = extras.getInt(BatteryManager.EXTRA\_LEVEL, 0);
  109. detail.data().put(BatteryManager.EXTRA\_LEVEL, level);
  110. //总电量
  111. int scale = extras.getInt(BatteryManager.EXTRA\_SCALE, 100);
  112. detail.data().put(BatteryManager.EXTRA\_SCALE, scale);
  113. //电池温度
  114. int temperature = extras.getInt(BatteryManager.EXTRA\_TEMPERATURE);
  115. detail.data().put(BatteryManager.EXTRA\_TEMPERATURE, temperature);
  116. //电池状态
  117. //1,未知状态。 android.os.BatteryManager.BATTERY\_STATUS\_UNKNOWN
  118. //2,充电。 android.os.BatteryManager.BATTERY\_STATUS\_CHARGING
  119. //3,放电。 android.os.BatteryManager.BATTERY\_STATUS\_DISCHARGING
  120. //4,未充电,包括放电和充满。android.os.BatteryManager.BATTERY\_STATUS\_NOT\_CHARGING
  121. //5,充满。 android.os.BatteryManager.BATTERY\_STATUS\_FULL
  122. int status = extras.getInt(BatteryManager.EXTRA\_STATUS);
  123. detail.data().put(BatteryManager.EXTRA\_STATUS, status);
  124. // 电池健康程度
  125. // 2,健康状态Good。android.os.BatteryManager.BATTERY\_HEALTH\_GOOD
  126. // 3,过热。android.os.BatteryManager.BATTERY\_HEALTH\_OVERHEAT
  127. // 5,电压过高。android.os.BatteryManager.BATTERY\_HEALTH\_OVER\_VOLTAGE
  128. // 7,过冷。android.os.BatteryManager.BATTERY\_HEALTH\_COLD
  129. int health = extras.getInt(BatteryManager.EXTRA\_HEALTH);
  130. detail.data().put(BatteryManager.EXTRA\_HEALTH, health);
  131. //当前电压。
  132. detail.data().put(BatteryManager.EXTRA\_VOLTAGE, extras.getInt(BatteryManager.EXTRA\_VOLTAGE));
  133. /\*\*
  134. \* 充电方式。
  135. \* BATTERY\_PLUGGED\_AC = 1; 表示充电器
  136. \* BATTERY\_PLUGGED\_USB = 2; 表示USB
  137. \* BATTERY\_PLUGGED\_WIRELESS = 4; 表示无线
  138. \*/
  139. detail.data().put(BatteryManager.EXTRA\_PLUGGED, extras.getInt(BatteryManager.EXTRA\_PLUGGED));
  140. /\*\*
  141. \*
  142. \* 当前电池技术。比如返回Li-poly表示锂电池。
  143. \*/
  144. detail.data().put(BatteryManager.EXTRA\_TECHNOLOGY, extras.getString(BatteryManager.EXTRA\_TECHNOLOGY));
  145. return detail;
  146. \}

}
-——————————
作者:zhangphil
来源:CSDN
原文:https://blog.csdn.net/zhangphil/article/details/89671624
版权声明:本文为博主原创文章,转载请附上博文链接!

发表评论

表情:
评论列表 (有 0 条评论,425人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Android电量相关知识

    电量的消耗在线上是难以量化,目前没有很好的方式能精准的获取到线上用户电量消耗情况,所以电量测试在线下非常关键,我们要测试重点业务耗电相关的场景,以及app处于后台时耗电量...