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电池信息获取的更多相关文章

  1. android电池信息简介

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. android WIFI信息获取

    在androi中WIFI信息的获取能够通过系统提供的WIFI Service获取 [java]  WifiManager wifi_service = (WifiManager)getSystemSe ...

  3. Android屏幕信息获取

    Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Displa ...

  4. android sdcard信息获取

    手机存储都有两种,一种是 手机自带的存储,称为internal storage,另外一种用户额外插入的存储,称为removable storage (也就是外置sdcard的部分). removabl ...

  5. android 手机信息获取

    1. adb已安装 2. adb shell getprop 此时已列出所有相关信息

  6. Android 充电信息的获取【转】

    本文转载自:https://blog.csdn.net/wateryi/article/details/50834821 在android系统中,电池信息是由BatteryService.java统一 ...

  7. Android 使用adb查看和修改电池信息

    1.获取电池信息 $ adb shell dumpsys battery $ adb shell dumpsys battery Current Battery Service state: AC p ...

  8. 【风马一族_Android】Android 从命令行界面获取手机信息

    Android 从命令行界面获取手机信息 1: cmd 打开命令行界面 2:adb devices   获取与电脑相连的设备,例如:模拟器.真机(手机) (右击“标记”,选择设备名称,点击“Ctrl+ ...

  9. Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

    Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...

随机推荐

  1. vscode不能打开浏览器(Open browser failed!! Please check if you have installed the browser correctly!)

    vscode出现上述问题,我也查了很多相关资料,什么改默认浏览器设置什么的,改配置,改系统环境变量什么的,不但麻烦而且最后都难以成功. 下面分享一个可以解决的最简单办法.那就是:舍弃open in b ...

  2. Python编写“求一元二次方程的解”

    #求一元二次方程的解 import math def equation(a,b,c): h=b*b-4*a*c #一元二次方程的解,百度来的 if h>=0: x1=(-b+math.sqrt( ...

  3. 动态规划-LCS-Uncrossed Lines

    2020-02-11 21:14:18 问题描述: 问题求解: 本质就是LCS. public int maxUncrossedLines(int[] A, int[] B) { int len1 = ...

  4. 使用Jenkins与Docker持续集成与发布NetCore项目(实操篇)

    使用Jenkins与Docker持续集成与发布NetCore项目(教程一) 原文地址:https://www.cnblogs.com/Jackyye/p/12588182.html 基本环境 该教程的 ...

  5. Django HttpResponse笔记

    HttpResponse 概述:给浏览器返回数据 HttpRequest对象是由django创建的,HttpResponse对象由程序员创建 用法 1:不调用模板,直接返回数据. 例: def get ...

  6. 控制台报错Cause: org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 78; 元素类型 "select" 必须后跟属性规范 ">" 或 "/>"

    首先我的控制台报错是这样的,我找了一下原因看到是第四行的错误: 它说元素select后面必须跟属性规范">""/>"但是我把我眼睛都快丑瞎了都没发现 ...

  7. Nuget多项目批量打包上传服务器的简明教程

    本篇不会介绍Nuget是什么,如何打包上传Nuget包,怎么搭建私有Nuget服务器.这些问题园子里都有相应的文章分享,这里不做过多阐述.另外本文假设你已经下载了Nuget.exe,并且已经设置好了环 ...

  8. 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...

    初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...

  9. Polya 定理相关题目

    参考知识链接   关于枚举旋转置换:   前两题都是枚举了 n 种旋转, 但这个可以优化到\(O(\sqrt{n})\) (这个其实是基本操作). 考虑到每个循环节的长度都是 n 的因数, 所以可以枚 ...

  10. ADB 调试

    1.adb简介 adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具.a ...