Android电池信息获取
Android 可以通过BroadcastReceiver来获取电池信息改变的广播(ACTION_BATTERY_CHANGED),从而获取到相关的电池信息。
电池信息,及其对应的相关常数(参考网址:http://blog.sina.com.cn/s/blog_5d2e69770102vh59.html)
| 电池信息 | 类型 | 备注 |
| status | int | 取得电池的状态,返回的状态类型由 android.os.BatteryManager 类定义的常量所决定,包括: |
| 电池充电状态( BATTERY_STATUS_CHARGING ) | ||
| 电池放电状态( BATTERY_STATUS_DISCHARGING ) | ||
| 电池满电状态( BATTERY_STATUS_FULL ) | ||
| 电池不充电状态( BATTERY_STATUS_NOT_CHARGING ) | ||
| 电池未知状态( BATTERY_STATUS_UNKNOWN ) | ||
| health | int | 取得电池的健康状态,返回的状态类型由 android.os.BatteryManager 类定义的常量所决定,包括: |
| 电池损坏( BATTERY_HEALTH_DEAD ) | ||
| 电池健康( BATTERY_HEALTH_GOOD ) | ||
| 电池过热( BATTERY_HEALTH_OVERHEAT ) | ||
| 电池电压过大( BATTERY_HEALTH_OVER_VOLTAGE ) | ||
| 未知状态( BATTERY_HEALTH_UNKOWN ) | ||
| 未明示故障( BATTERY_HEALTH_UNSPECIFIED_FAILURE ) | ||
| present | boolean | 判断当前是否存在电池 |
| level | int | 取得电池的剩余容量 |
| scale | int | 取得电池的总容量,通常为 100 |
| Icon-small | int | 取得电池对应的图标 ID |
| plugged | int | 连接的电源插座类型,返回的状态由 android.os.BatteryManager 类定义的常量所决定,包括: |
| USB 电源( BATTERY_PLUGGED_USB ) | ||
| 交流电电源( BATTERY_PLUGGED_AC ) | ||
| voltage | int | 取得电池的电压 |
| temperature | int | 取得电池的温度,单位是摄氏度 |
| technology | String | 取得电池的类型 |
获取电池信息的步骤:
(1) 创建BroadcastReceiver,用于结束电池信息变化的广播
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
//TO GET BatteryInfo
}
(2) 重写onResume()方法,获取IntentFilter对象,并注册BroadcastReceiver
protected void onResume() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(mBroadcastReceiver, filter);
super.onResume();
}
(3)程序在后台的时候取消注册BroadcastReceiver
protected void onPause() {
unregisterReceiver(mBroadcastReceiver);
super.onPause();
}
实例:
public class GetBatteryInfo extends Activity {
private static final int REFRESH_TIME = 1;
private static boolean runtime=false;
private TextView mStatus_BatteryInfo;
private TextView mPlugged_BatteryInfo;
private TextView mLevel_BatteryInfo;
private TextView mScale_BatteryInfo;
private TextView mVoltage_BatteryInfo;
private TextView mTemperature_BatteryInfo;
private TextView mTechnology_BatteryInfo;
private TextView mHealth_BatteryInfo;
private TextView mRuntime_BatteryInfo;
private TimeThread timeThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InitView();
}
private void InitView() {
mStatus_BatteryInfo=(TextView)findViewById(R.id.status_BatteryInfo);
mPlugged_BatteryInfo=(TextView)findViewById(R.id.plugged_BatteryInfo);
mLevel_BatteryInfo=(TextView)findViewById(R.id.level_BatteryInfo);
mScale_BatteryInfo=(TextView)findViewById(R.id.scale_BatteryInfo);
mVoltage_BatteryInfo=(TextView)findViewById(R.id.voltage_BatteryInfo);
mTemperature_BatteryInfo=(TextView)findViewById(R.id.temperature_BatteryInfo);
mTechnology_BatteryInfo=(TextView)findViewById(R.id.technology_BatteryInfo);
mHealth_BatteryInfo=(TextView)findViewById(R.id.health_BatteryInfo);
mRuntime_BatteryInfo=(TextView)findViewById(R.id.runtime_BatteryInfo);
}
@Override
protected void onResume() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(mBroadcastReceiver, filter);
startTimeThread(timeThread);
super.onResume();
}
@Override
protected void onPause() {
stopTimeThread(timeThread);
unregisterReceiver(mBroadcastReceiver);
super.onPause();
}
/**
* @param milliseconds 将ms转化为hh:mm:ss 格式时间
* @return
*/
private String msToTime(int milliseconds ){
int allSeconds=(milliseconds/1000);
int hours=allSeconds/3600;
String hours_string;
int feelSeconds=allSeconds%3600;
int mimute=feelSeconds/60;
String mimute_string;
String second_string;
int second=feelSeconds%60;
if(hours<10){
hours_string="0"+String.valueOf(hours);
}else{
hours_string=String.valueOf(hours);
}
if(mimute<10){
mimute_string="0"+String.valueOf(mimute);
}else{
mimute_string=String.valueOf(mimute);
}
if(second<10){
second_string="0"+String.valueOf(second);
}else{
second_string=String.valueOf(second);
}
return hours_string+":"+mimute_string+":"+second_string;
}
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
int status = intent.getIntExtra("status", 0);
int health = intent.getIntExtra("health", 0);
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 0);
int plugged = intent.getIntExtra("plugged", 0);
int voltage = intent.getIntExtra("voltage", 0);
int temperature = intent.getIntExtra("temperature", 0);
String technology = intent.getStringExtra("technology");
mLevel_BatteryInfo.setText(level+"");
mScale_BatteryInfo.setText(scale+"");
mVoltage_BatteryInfo.setText(voltage+"mV");
mTemperature_BatteryInfo.setText(((float)temperature/10)+"℃");
mTechnology_BatteryInfo.setText(technology+"");
mRuntime_BatteryInfo.setText(msToTime((int) SystemClock.elapsedRealtime()));
switch (status) {
case BatteryManager.BATTERY_STATUS_UNKNOWN:
mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_UNKNOWN));
break;
case BatteryManager.BATTERY_STATUS_CHARGING:
mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_CHARGING));
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_DISCHARGING));
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_NOT_CHARGING));
break;
case BatteryManager.BATTERY_STATUS_FULL:
mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_FULL));
break;
}
switch (health) {
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_UNKOWN));
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_GOOD));
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_OVERHEAT));
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_DEAD));
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_VOLTAGE));
break;
case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_UNSPECIFIED_FAILURE));
break;
}
switch (plugged) {
case BatteryManager.BATTERY_PLUGGED_AC:
mPlugged_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_plugged_AC));
break;
case BatteryManager.BATTERY_PLUGGED_USB:
mPlugged_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_plugged_USB));
break;
default:
mPlugged_BatteryInfo.setText("");
}
}
}
};
Handler TimeHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case REFRESH_TIME:
mRuntime_BatteryInfo.setText(msToTime((int) SystemClock.elapsedRealtime()));//获取系统启动时间
break;
default:
break;
}
super.handleMessage(msg);
}
};
/**
* 打开线程timeThread
* @param timeThread
* @param runtime 运行标志位
*/
private void startTimeThread(Thread timeThread){
if(timeThread==null){
runtime=true;
timeThread=new TimeThread();
timeThread.start();
}
}
/**
* 停止线程
* @param timeThread
*/
private void stopTimeThread(Thread timeThread){
if(timeThread!=null){
Thread.currentThread().interrupt();
timeThread.interrupt();
runtime=false;
}
}
class TimeThread extends Thread{
@Override
public void run() {
while(runtime){
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg=new Message();
msg.what=REFRESH_TIME;
TimeHandler.sendMessage(msg);
}
}
}
}
布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:clipToPadding="true"
android:fitsSystemWindows="true"
android:orientation="vertical" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#5CD8AF"
android:gravity="center_vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="@string/SystemSetBatteryInfo_BatteryInfo_textvie"
android:textColor="@android:color/white"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_status_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/status_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_plugged_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/plugged_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_level_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/level_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_scale_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/scale_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_voltage_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/voltage_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_temperature_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/temperature_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_technology_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/technology_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_health_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/health_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="@string/SystemSetBatteryInfo_runtime_textview"
android:textColor="@color/main_view_color"
android:textSize="18sp" /> <TextView
android:id="@+id/runtime_BatteryInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/main_view_color"
android:textSize="18sp" />
</LinearLayout> </LinearLayout>
Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">GetBatteryInfo</string>
<string name="SystemSetBatteryInfo_BatteryInfo_textvie">电池信息</string>
<string name="SystemSetBatteryInfo_status_textview">电池状态:</string>
<string name="SystemSetBatteryInfo_plugged_textview">充电方式:</string>
<string name="SystemSetBatteryInfo_level_textview">电池电量:</string>
<string name="SystemSetBatteryInfo_scale_textview">电池容量:</string>
<string name="SystemSetBatteryInfo_voltage_textview">电池电压:</string>
<string name="SystemSetBatteryInfo_temperature_textview">电池温度:</string>
<string name="SystemSetBatteryInfo_technology_textview">电池类型:</string>
<string name="SystemSetBatteryInfo_health_textview">健康状态:</string>
<string name="SystemSetBatteryInfo_runtime_textview">使用时间:</string>
<string name="BatteryInfo_status_CHARGING">正在充电</string>
<string name="BatteryInfo_status_DISCHARGING">正在耗电</string>
<string name="BatteryInfo_status_FULL">电量充满</string>
<string name="BatteryInfo_status_NOT_CHARGING ">未充电</string>
<string name="BatteryInfo_status_UNKNOWN">状态未知</string>
<string name="BatteryInfo_plugged_USB">USB电源</string>
<string name="BatteryInfo_plugged_AC">交流电电源</string>
<string name="BatteryInfo_health_DEAD">电池损坏</string>
<string name="BatteryInfo_health_GOOD">电池正常</string>
<string name="BatteryInfo_health_OVERHEAT">电池过热</string>
<string name="BatteryInfo_health_VOLTAGE ">电池电压过大</string>
<string name="BatteryInfo_health_UNKOWN">未知状态</string>
<string name="BatteryInfo_health_UNSPECIFIED_FAILURE">未明示故障</string> </resources>
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="main_view_color">#1f1f1f</color>
<color name="main_text_color">#6f6f6f</color>
</resources>
Android电池信息获取的更多相关文章
- android电池信息简介
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- android WIFI信息获取
在androi中WIFI信息的获取能够通过系统提供的WIFI Service获取 [java] WifiManager wifi_service = (WifiManager)getSystemSe ...
- Android屏幕信息获取
Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Displa ...
- android sdcard信息获取
手机存储都有两种,一种是 手机自带的存储,称为internal storage,另外一种用户额外插入的存储,称为removable storage (也就是外置sdcard的部分). removabl ...
- android 手机信息获取
1. adb已安装 2. adb shell getprop 此时已列出所有相关信息
- Android 充电信息的获取【转】
本文转载自:https://blog.csdn.net/wateryi/article/details/50834821 在android系统中,电池信息是由BatteryService.java统一 ...
- Android 使用adb查看和修改电池信息
1.获取电池信息 $ adb shell dumpsys battery $ adb shell dumpsys battery Current Battery Service state: AC p ...
- 【风马一族_Android】Android 从命令行界面获取手机信息
Android 从命令行界面获取手机信息 1: cmd 打开命令行界面 2:adb devices 获取与电脑相连的设备,例如:模拟器.真机(手机) (右击“标记”,选择设备名称,点击“Ctrl+ ...
- Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类
Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...
随机推荐
- Idea中使用http请求解决中文乱码问题
以请求百度为例,使用如下代码即可解决: GET https://www.baidu.com User-Agent: Mozilla/.X MetaSr 1.0
- MySQL----SQL操作
1.什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方,称为“方言”. 2.SQL通用 ...
- 从字节码来分析,i++与++i区别
++/-- 是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数 前缀自增(++a):先进行自增运算,再进行表达式运算: 后缀自增(a++):先进行表达式运算, ...
- Spring02——Spring 中 Bean 的生命周期及其作用域
在前一篇文章中,我们已经介绍了 Spring IOC 的相关知识,今天将为个位介绍 Spring 中 Bean 的相关知识.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java ...
- PS2手柄在arduino上进行测试,可用,供喜欢diy的朋友借鉴
#include <PS2X_lib.h> //PS2手柄PS2X ps2x; // create PS2 Controller Class//////////PS2引脚///////// ...
- node.js初步
Node.js介绍 Node.js 诞生于2009年,Node.js采用C++语言编写而成,是 一个Javascript的运行环境.Node.js 是一个基于 Chrome V8 引擎的 JavaSc ...
- java 初学者 第一阶段作业编程总结及心得体会
0.前言 第一阶段java作业分为3次. 第一次作业是简单得一些语法和一些简单得逻辑思维,主要内容有求三角形是什么三角形的,还有就是求坐标点所在范围的,也涉及到了数字和字母的转换,总之相相当于是给ja ...
- 第二次实验报告:使用 Packet Tracer 分析应用层协议
个人信息: 姓名:倪晓东 班级:计算1811 学号:201821121020 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序 ...
- jdk安装和配置教程
目录 jdk的下载 jdk的安装 配置环境变量 验证是否配置成功] 一些常见的错误(待更新) 一.首先是jdk的下载 链接:https://pan.baidu.com/s/1ojQDuCwiGSA7A ...
- Java复合优先于继承
复合优于继承 继承打破了封装性(子类依赖父类中特定功能的实现细节) 合理的使用继承的情况: 在包内使用 父类专门为继承为设计,并且有很好的文档说明,存在is-a关系 只有当子类真正是父类的子类型时,才 ...