1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <Button
  8. android:id="@+id/btn_battery"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:text="获取电池的信息" />
  12.  
  13. <TextView
  14. android:id="@+id/tv_battery"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"
  17. />
  18.  
  19. </RelativeLayout>
  1. package com.example.yanlei.yl;
  2.  
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.content.IntentFilter;
  7. import android.os.BatteryManager;
  8. import android.os.Bundle;
  9. import android.support.v7.app.AppCompatActivity;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.Button;
  13. import android.widget.TextView;
  14. public class MainActivity extends AppCompatActivity {
  15. // 定义电池信息的按钮
  16. private Button btnBattery;
  17. // 定义显示电池信息的textview
  18. private TextView tvBattery;
  19.  
  20. @Override
  21. public void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. // 得到布局中的所有对象
  25. findView();
  26. // 设置对象的监听器
  27. setListener();
  28. }
  29.  
  30. private void findView() {
  31. // 得到布局中的所有对象
  32. btnBattery = (Button) findViewById(R.id.btn_battery);
  33. tvBattery = (TextView) findViewById(R.id.tv_battery);
  34. }
  35.  
  36. // 设置对象的监听器
  37. private void setListener() {
  38. btnBattery.setOnClickListener(listener);
  39. }
  40.  
  41. OnClickListener listener = new OnClickListener() {
  42.  
  43. @Override
  44. public void onClick(View v) {
  45. // TODO Auto-generated method stub
  46. switch (v.getId()) {
  47.  
  48. // 当前的音量
  49. case R.id.btn_battery:
  50.  
  51. IntentFilter filter = new IntentFilter();
  52. filter.addAction(Intent.ACTION_BATTERY_CHANGED);
  53. registerReceiver(mBroadcastReceiver, filter);
  54. break;
  55. }
  56. }
  57. };
  58. // 声明广播接受者对象
  59. private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
  60.  
  61. @Override
  62. public void onReceive(Context context, Intent intent) {
  63. // TODO Auto-generated method stub
  64. String action = intent.getAction();
  65. if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
  66. // 得到电池状态:
  67. // BatteryManager.BATTERY_STATUS_CHARGING:充电状态。
  68. // BatteryManager.BATTERY_STATUS_DISCHARGING:放电状态。
  69. // BatteryManager.BATTERY_STATUS_NOT_CHARGING:未充满。
  70. // BatteryManager.BATTERY_STATUS_FULL:充满电。
  71. // BatteryManager.BATTERY_STATUS_UNKNOWN:未知状态。
  72. int status = intent.getIntExtra("status", 0);
  73. // 得到健康状态:
  74. // BatteryManager.BATTERY_HEALTH_GOOD:状态良好。
  75. // BatteryManager.BATTERY_HEALTH_DEAD:电池没有电。
  76. // BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:电池电压过高。
  77. // BatteryManager.BATTERY_HEALTH_OVERHEAT:电池过热。
  78. // BatteryManager.BATTERY_HEALTH_UNKNOWN:未知状态。
  79. int health = intent.getIntExtra("health", 0);
  80. // boolean类型
  81. boolean present = intent.getBooleanExtra("present", false);
  82. // 得到电池剩余容量
  83. int level = intent.getIntExtra("level", 0);
  84. // 得到电池最大值。通常为100。
  85. int scale = intent.getIntExtra("scale", 0);
  86. // 得到图标ID
  87. int icon_small = intent.getIntExtra("icon-small", 0);
  88. // 充电方式: BatteryManager.BATTERY_PLUGGED_AC:AC充电。 BatteryManager.BATTERY_PLUGGED_USB:USB充电。
  89. int plugged = intent.getIntExtra("plugged", 0);
  90. // 得到电池的电压
  91. int voltage = intent.getIntExtra("voltage", 0);
  92. // 得到电池的温度,0.1度单位。例如 表示197的时候,意思为19.7度
  93. int temperature = intent.getIntExtra("temperature", 0);
  94. // 得到电池的类型
  95. String technology = intent.getStringExtra("technology");
  96. // 得到电池状态
  97. String statusString = "";
  98. // 根据状态id,得到状态字符串
  99. switch (status) {
  100. case BatteryManager.BATTERY_STATUS_UNKNOWN:
  101. statusString = "unknown";
  102. break;
  103. case BatteryManager.BATTERY_STATUS_CHARGING:
  104. statusString = "charging";
  105. break;
  106. case BatteryManager.BATTERY_STATUS_DISCHARGING:
  107. statusString = "discharging";
  108. break;
  109. case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
  110. statusString = "not charging";
  111. break;
  112. case BatteryManager.BATTERY_STATUS_FULL:
  113. statusString = "full";
  114. break;
  115. }
  116. //得到电池的寿命状态
  117. String healthString = "";
  118. //根据状态id,得到电池寿命
  119. switch (health) {
  120. case BatteryManager.BATTERY_HEALTH_UNKNOWN:
  121. healthString = "unknown";
  122. break;
  123. case BatteryManager.BATTERY_HEALTH_GOOD:
  124. healthString = "good";
  125. break;
  126. case BatteryManager.BATTERY_HEALTH_OVERHEAT:
  127. healthString = "overheat";
  128. break;
  129. case BatteryManager.BATTERY_HEALTH_DEAD:
  130. healthString = "dead";
  131. break;
  132. case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
  133. healthString = "voltage";
  134. break;
  135. case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
  136. healthString = "unspecified failure";
  137. break;
  138. }
  139. //得到充电模式
  140. String acString = "";
  141. //根据充电状态id,得到充电模式
  142. switch (plugged) {
  143. case BatteryManager.BATTERY_PLUGGED_AC:
  144. acString = "plugged ac";
  145. break;
  146. case BatteryManager.BATTERY_PLUGGED_USB:
  147. acString = "plugged usb";
  148. break;
  149. }
  150. //显示电池信息
  151. tvBattery.setText("电池的状态:" + statusString
  152. + "\n健康值: "+ healthString
  153. + "\n电池剩余容量: " + level
  154. + "\n电池的最大值:" + scale
  155. + "\n小图标:" + icon_small
  156. + "\n充电方式:" + plugged
  157. + "\n充电方式: " + acString
  158. + "\n电池的电压:" + voltage
  159. + "\n电池的温度:" + (float) temperature * 0.1
  160. + "\n电池的类型:" + technology);
  161. }
  162. }
  163. };
  164.  
  165. @Override
  166. protected void onPause() {
  167. super.onPause();
  168. // 解除注册监听
  169. unregisterReceiver(mBroadcastReceiver);
  170. }
  171.  
  172. }

android 获得电池状态的更多相关文章

  1. Android虚拟机电池状态设置

    问题描述: 安装SDK后使用AVD配合APPIUM进行测试,此时虚拟机的电池状态为0%充电中:部分APP会对手机电池状态有要求,不符合要求时,无法安装或打开. 解决思路: 1.Android系统设置( ...

  2. Android - 电池状态

    为了解决电池图标的问题,顺带看了看电池信息的获取方法 :自己写了一个小栗子,来验证一下效果 电池的信息,一般都在BatteryManager里面,信息是用广播发出的.我们更新信息需要一个广播接收器 注 ...

  3. Android监听电池状态

    监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: (1)连接USB时的状态 (2)断开USB时的状态 ...

  4. 几个有趣的WEB设备API 前端提高B格必备(一)——电池状态&震动api

    受到同事启发,突然发现了几个有趣又实用的web api,没想到前端还有这么多有趣的东西可以玩~~简直过分. 1.电池状态API navigator.getBattery():这个api返回的是一个pr ...

  5. Android Healthd电池服务分析

    healthd healthd是安卓4.4之后提出来的,监听来自kernel的电池事件,并向上传递电池数据给framework层的BatteryService.BatteryService计算电池电量 ...

  6. 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复

    [源码下载] 与众不同 windows phone (47) - 8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 作者:webabcd 介绍与众不同 win ...

  7. Android 监控网络状态

    public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (Conn ...

  8. IOS 特定于设备的开发:检查设备接近度和电池状态

    UIDevice类提供了一些API,使你能够跟踪设备的特征,包括电池的状态和接近度传感器.他们二者都以通知的形式提供更新,可以订阅他们,以便在有重要的更新时通知你的应用程序. 1>启动和禁用接近 ...

  9. Android 锁屏状态/锁屏密码等相关

    Android 锁屏状态/锁屏密码等相关 开始是在设备管理器方面找方法,但一直不行,可能在公司系统组同事的帮助下,知道KeyguardManager这个类 /** * 当前系统锁屏是否有密码 * @p ...

随机推荐

  1. Re:从零开始的Linux之路(杂谈)

    决定认真从零开始写一个Linux的学习过程,像我这么偷懒的人能写文字记录已经很不容易了,希望不要半途而废吧(拖走) 用多了Linux其实发现,要是哪天Linux和Windows能结合下就好了,简单粗暴 ...

  2. django第四天(路由别名,django2.x新特性和自定义转换器)

    django第四天 路由别名 1.路由别名: 给路由路径命名一个名字 url(r'^login/$',views.login,name = 'login') 2.为什么要用路由别名 ①当路由路径过长时 ...

  3. 零基础学Python不迷茫——基本学习路线及教程!

    什么是Python? 在过去的2018年里,Python成功的证明了它自己有多火,它那“简洁”与明了的语言成功的吸引了大批程序员与大数据应用这的注意,的确,它的实用性的确是配的上它的热度.   Pyt ...

  4. Bin Paking Problem:简单的构造性算法

    *本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 目录 BL和BLF算法 BF算法 HR算法 PH算法

  5. bash文件名统配

    bash基础特性之globbing,即文件名通配:     文件名通配:使用元字符匹配字符         *:匹配任意长度的任意字符             假如文件名为paaaa,则pa*,*pa ...

  6. centos 安装 yum apt

    以下地址 http://download.csdn.NET/detail/mimi00x/8081263 执行安装命令 rpm -i rpmforge-release-0.5.3-1.el7.rf.x ...

  7. 关于面试总结-app测试面试题

    前言 现在面试个测试岗位,都是要求全能的,web.接口.app啥都要会测,那么APP测试一般需要哪些技能呢? 面试app测试岗位会被问到哪些问题,怎样让面试管觉得你对APP测试很精通的样子? 本篇总结 ...

  8. centos7中的网卡一致性命名规则、网卡重命名方法

    一致性网络设备命名(Consistent Network Device Naming) 背景介绍: 在centos5的时候,我们习惯了eth0这样的网络设备命名,在centos6发现网络设备变成了em ...

  9. ubuntu 转换图片格式的方法(sam2p, imagemagick)

    (1) 终端:sudo apt-get install sam2p sam2p [原图片名.格式] [目标图片名.格式] 即可在同一目录下生成目标图片格式 (2) 终端: sudo apt-get i ...

  10. Centos7 安装配置优化mysql(mariadb分支)

    1.说明 由于在centos7的yum仓库中没有mysql,centos7用mariadb替代了mysql. mariadb是mysql源代码的一个分支, mysql被ORACLE闭源,而mariad ...