- 浏览: 181710 次
- 性别:
- 来自: 浙江
文章分类
最新评论
安卓系统通过广播来接受电池状态,下面是我写的一个简单电池管理项目。
广播接受类BatteryReceiver如下:
package com.lml.batteryshow;
import java.util.HashMap;
import java.util.Map;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.os.Message;
public class BatteryReceiver extends BroadcastReceiver {
Message message;
Map<String, String> map = null;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
map = new HashMap<String, String>();
/** 电池剩余电量 */
map.put("level", intent.getIntExtra("level", 0)+"");
/** 获取电池满电量数值 */
map.put("scale", intent.getIntExtra("scale", 0)+"");
/** 获取电池技术支持 */
map.put("technology", intent.getStringExtra("technology"));
/** 获取电池状态 */
map.put("status", intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN)+"");
/** 获取电源信息 */
map.put("plugType", intent.getIntExtra("plugged", 0)+"");
/** 获取电池健康度 */
map.put("health", intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN)+"");
/** 获取电池电压 */
map.put("voltage", intent.getIntExtra("voltage", 0) + "");
/** 获取电池温度 */
map.put("temperature", intent.getIntExtra("temperature", 0) + "");
}
if (map != null) {
message = new Message();
message.obj = map;
MainActivity.handler1.dispatchMessage(message);
}
}
}
主类MainActivity代码实现如下:
package com.lml.batteryshow;
import java.text.DecimalFormat;
import java.util.Map;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.widget.TextView;
public class MainActivity extends Activity {
/** 电池状态 */
private TextView battery_Status;
/** 电池允许状态 */
private TextView battery_Run_Status;
/** 电池电压 */
private TextView battery_Voltage;
/** 电池温度 */
private TextView battery_Temperature;
/** 电池技术 */
private TextView battery_Technology;
/** 电池运行时间 */
private TextView battery_Time;
/** 电池电量 */
private TextView battery_Level;
Thread thread;
public static Handler handler1;
public Handler handler2;
BatteryReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
thread= new Thread(runnable);
thread.start();
regReceiver();
handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
MainActivity.this.handleMessage(msg);
}
};
/** 设置启动时间 */
handler2 = new Handler() {
@Override
public void handleMessage(Message msg) {
battery_Time.setText("启动后时间:"+msg.obj.toString());
}
};
}
private void regReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
receiver=new BatteryReceiver();
registerReceiver(receiver, filter);
}
private void handleMessage(Message msg){
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) msg.obj;
String plugType=map.get("plugType");
/** 设置电池状态 为USB充电 */
if (plugType.equals("2")) {
battery_Status.setText("电池状态:正在充电(USB)");
}
/** 设置电池状态 为交流电充电 */
else if (plugType.equals("1")) {
battery_Status.setText("电池状态:正在充电(交流电)");
}
/** 设置电池状态 */
else if (plugType.equals("0")) {
battery_Status.setText("电池状态:正在耗电");
}
/** 获取电池健康度 */
String health = map.get("health");
if (health.equals(2)) {
battery_Run_Status.setText("电池健康度;正常");
} else {
battery_Run_Status.setText("电池健康度;一般");
}
/** 设置电池电压 */
battery_Voltage.setText( "电池电压:"+map.get("voltage") + "mV");
/** 设置电池温度 */
double temp = Double.parseDouble(map.get("temperature") );
battery_Temperature.setText("电池温度:"+ (temp / 10) + "°C");
/** 获取电池满电量数值 */
double scale = Double.parseDouble(map.get("scale") );
/** 获取电池剩余电量 */
double level = Double.parseDouble(map.get("level") );
double per =level/scale;
String strPer=optionNum(per);
/** 设置电池电量 */
battery_Level.setText("电池电量:"+Double.parseDouble(strPer) * 100 + "%");
/** 设置电池技术 */
battery_Technology.setText( "电池技术:"+map.get("technology"));
}
@Override
protected void onDestroy() {
super.onDestroy();
thread.interrupt();
unregisterReceiver(receiver);
}
public String optionNum(double f) {
DecimalFormat df = new DecimalFormat("#.00");
return df.format(f);
}
private void init() {
/** 获取电池状态对象 */
battery_Status = (TextView) findViewById(R.id.battery_status);
/** 获取电池运行状态 */
battery_Run_Status = (TextView) findViewById(R.id.battery_health);
/** 获取电池电压 */
battery_Voltage = (TextView) findViewById(R.id.battery_voltage);
/** 获取电池温度 */
battery_Temperature = (TextView) findViewById(R.id.battery_temperature);
/** 获取电池技术 */
battery_Technology = (TextView) findViewById(R.id.battery_technology);
/** 开机电池运行时间 */
battery_Time = (TextView) findViewById(R.id.boot_time);
/** 获取电池电量对象 */
battery_Level = (TextView) findViewById(R.id.battery);
}
Runnable runnable=new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
long temp = SystemClock.elapsedRealtime();
Message message = new Message();
message.obj = Util.transitionTime(temp);
handler2.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
}
帮助类util如下:
package com.lml.batteryshow;
public class Util {
public static String transitionTime(long time) {
long temp1 = time / 1000;
long temp2 = temp1 / 60;
long temp3 = temp2 / 60;
String h = temp3 % 60 + "";
String m = temp2 % 60 + "";
String s = temp1 % 60 + "";
if (m.length() < 2) {
m = "0" + m;
}
if (s.length() < 2) {
s = "0" + s;
}
String time1 = h + ":" + m + ":" + s;
System.out.println(time1);
return time1;
}
}
布局文件activity_main.xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="50dp"
android:gravity="center_vertical">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="电池状态"
android:textSize="20sp"
android:layout_marginBottom="40dp"/>
<TextView
android:id="@+id/battery_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/battery_health"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/battery_voltage"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/battery_temperature"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/battery_technology"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/battery"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/boot_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
这是简单的实现的电源管理。
广播接受类BatteryReceiver如下:
package com.lml.batteryshow;
import java.util.HashMap;
import java.util.Map;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.BatteryManager;
import android.os.Message;
public class BatteryReceiver extends BroadcastReceiver {
Message message;
Map<String, String> map = null;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
map = new HashMap<String, String>();
/** 电池剩余电量 */
map.put("level", intent.getIntExtra("level", 0)+"");
/** 获取电池满电量数值 */
map.put("scale", intent.getIntExtra("scale", 0)+"");
/** 获取电池技术支持 */
map.put("technology", intent.getStringExtra("technology"));
/** 获取电池状态 */
map.put("status", intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN)+"");
/** 获取电源信息 */
map.put("plugType", intent.getIntExtra("plugged", 0)+"");
/** 获取电池健康度 */
map.put("health", intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN)+"");
/** 获取电池电压 */
map.put("voltage", intent.getIntExtra("voltage", 0) + "");
/** 获取电池温度 */
map.put("temperature", intent.getIntExtra("temperature", 0) + "");
}
if (map != null) {
message = new Message();
message.obj = map;
MainActivity.handler1.dispatchMessage(message);
}
}
}
主类MainActivity代码实现如下:
package com.lml.batteryshow;
import java.text.DecimalFormat;
import java.util.Map;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.widget.TextView;
public class MainActivity extends Activity {
/** 电池状态 */
private TextView battery_Status;
/** 电池允许状态 */
private TextView battery_Run_Status;
/** 电池电压 */
private TextView battery_Voltage;
/** 电池温度 */
private TextView battery_Temperature;
/** 电池技术 */
private TextView battery_Technology;
/** 电池运行时间 */
private TextView battery_Time;
/** 电池电量 */
private TextView battery_Level;
Thread thread;
public static Handler handler1;
public Handler handler2;
BatteryReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
thread= new Thread(runnable);
thread.start();
regReceiver();
handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
MainActivity.this.handleMessage(msg);
}
};
/** 设置启动时间 */
handler2 = new Handler() {
@Override
public void handleMessage(Message msg) {
battery_Time.setText("启动后时间:"+msg.obj.toString());
}
};
}
private void regReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
receiver=new BatteryReceiver();
registerReceiver(receiver, filter);
}
private void handleMessage(Message msg){
@SuppressWarnings("unchecked")
Map<String, String> map = (Map<String, String>) msg.obj;
String plugType=map.get("plugType");
/** 设置电池状态 为USB充电 */
if (plugType.equals("2")) {
battery_Status.setText("电池状态:正在充电(USB)");
}
/** 设置电池状态 为交流电充电 */
else if (plugType.equals("1")) {
battery_Status.setText("电池状态:正在充电(交流电)");
}
/** 设置电池状态 */
else if (plugType.equals("0")) {
battery_Status.setText("电池状态:正在耗电");
}
/** 获取电池健康度 */
String health = map.get("health");
if (health.equals(2)) {
battery_Run_Status.setText("电池健康度;正常");
} else {
battery_Run_Status.setText("电池健康度;一般");
}
/** 设置电池电压 */
battery_Voltage.setText( "电池电压:"+map.get("voltage") + "mV");
/** 设置电池温度 */
double temp = Double.parseDouble(map.get("temperature") );
battery_Temperature.setText("电池温度:"+ (temp / 10) + "°C");
/** 获取电池满电量数值 */
double scale = Double.parseDouble(map.get("scale") );
/** 获取电池剩余电量 */
double level = Double.parseDouble(map.get("level") );
double per =level/scale;
String strPer=optionNum(per);
/** 设置电池电量 */
battery_Level.setText("电池电量:"+Double.parseDouble(strPer) * 100 + "%");
/** 设置电池技术 */
battery_Technology.setText( "电池技术:"+map.get("technology"));
}
@Override
protected void onDestroy() {
super.onDestroy();
thread.interrupt();
unregisterReceiver(receiver);
}
public String optionNum(double f) {
DecimalFormat df = new DecimalFormat("#.00");
return df.format(f);
}
private void init() {
/** 获取电池状态对象 */
battery_Status = (TextView) findViewById(R.id.battery_status);
/** 获取电池运行状态 */
battery_Run_Status = (TextView) findViewById(R.id.battery_health);
/** 获取电池电压 */
battery_Voltage = (TextView) findViewById(R.id.battery_voltage);
/** 获取电池温度 */
battery_Temperature = (TextView) findViewById(R.id.battery_temperature);
/** 获取电池技术 */
battery_Technology = (TextView) findViewById(R.id.battery_technology);
/** 开机电池运行时间 */
battery_Time = (TextView) findViewById(R.id.boot_time);
/** 获取电池电量对象 */
battery_Level = (TextView) findViewById(R.id.battery);
}
Runnable runnable=new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
long temp = SystemClock.elapsedRealtime();
Message message = new Message();
message.obj = Util.transitionTime(temp);
handler2.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
}
帮助类util如下:
package com.lml.batteryshow;
public class Util {
public static String transitionTime(long time) {
long temp1 = time / 1000;
long temp2 = temp1 / 60;
long temp3 = temp2 / 60;
String h = temp3 % 60 + "";
String m = temp2 % 60 + "";
String s = temp1 % 60 + "";
if (m.length() < 2) {
m = "0" + m;
}
if (s.length() < 2) {
s = "0" + s;
}
String time1 = h + ":" + m + ":" + s;
System.out.println(time1);
return time1;
}
}
布局文件activity_main.xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="50dp"
android:gravity="center_vertical">
<TextView
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="电池状态"
android:textSize="20sp"
android:layout_marginBottom="40dp"/>
<TextView
android:id="@+id/battery_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/battery_health"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/battery_voltage"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/battery_temperature"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/battery_technology"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/battery"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/boot_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
这是简单的实现的电源管理。
- BatteryShow.rar (1.3 MB)
- 下载次数: 4
发表评论
-
关于Android的webSocket的简单使用
2017-05-12 14:34 935使用第三方jar: autobahn-0.5.0.jar 连 ... -
Comparator自定义排序的使用
2017-05-11 14:18 720java对于集合的自定义排序方法有: Arrays.sort ... -
查看Android虚拟机文件相关命令
2017-05-02 14:12 529我们在虚拟机下添加文件后,想查看下文件是否正确创建,可在win ... -
android6.0创建文件问题
2017-05-02 12:58 550Android在6.0有了动态权限管理,在文件创建时就需要动态 ... -
xutils的http模块的简单使用
2017-04-28 16:05 488先导入xutils相关依赖: compile 'org.xut ... -
Litepal的简单使用
2017-04-27 17:21 602相关包下载地址:https://github.com/Lite ... -
Android下拉刷新上拉加载控件的使用
2017-04-21 10:46 805参考链接:http://www.jianshu.com/p/6 ... -
图片加载框架
2017-04-19 16:29 372图片加载框架: picasso ImageLoader -
Android的Service总结
2017-04-17 15:46 424参考链接:http://www.cnblogs.com/lwb ... -
解决ViewPager的addOnPageChangeListener不加载第一个的问题
2017-03-18 17:53 2590今天在使用ViewPager的时候发现个问题。 需求如下: ... -
clone方法的使用
2017-01-04 10:14 522由于Java有引用这一说,当两个变量指向同一块内存时,改变 ... -
Fragment无法切换问题
2016-12-16 14:57 2080Android有一个回收机制,当内存不足时,会自动回收相关内存 ... -
关于Material Design的CollapsingToolbarLayout初次使用
2016-12-16 13:38 579最近了解了下CollapsingToolbarLayout的使 ... -
MVP模式的学习
2016-12-10 15:15 622以前我写代码都是使用MVC模式,这种模式使Activity变得 ... -
Material Design:Android Design Support Library 介绍
2016-12-10 14:14 429参考链接 : https://blog.leancloud.c ... -
SpannableString简介
2016-12-10 14:03 388参考链接: http://www.cnblogs.com/ji ... -
getResources().getDrawable方法的废弃
2016-12-10 13:20 1164参考链接:http://www.jianshu.com/p/e ... -
关于AndroidStudio的Unsupported major.minor version 52.0异常
2016-12-10 13:15 2345参考链接:http://blog.csdn.net/fakin ... -
Android记录
2015-06-01 10:54 610http://tools.android-studio.org ... -
android自定义控件相关使用
2015-04-24 16:53 576用代码简单介绍下自定义控件的使用: 先看主activity: ...
相关推荐
实现一个电池属性实时监听器。这些属性包括温度,电池电量....等等。而且,使用Service,Broadcast,以及Thread的方式来实现。MyBatteryService后台获取Battery属性值,然后,在Activity中进行相关数据的显示。
此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的...
清理手机缓存,提高手机性能,优化电池管理 高级工具: 自动ip拨号,手机号码归属地查询,更改归属地位置,常用号码查询。 安全专题: 1、通过0权限上传下载数据,重启手机等案例,深入讲解android沙箱,安全机制和...
这时候希望重新去打开该权限,那么问题来了,Android厂家定制的room五花八门,很多时候却发现找不到权限管理的入口。为了解决这一问题,如果我们应用中直接提供权限管理入口给用户,是不是会很方便的解决用户这一...
Android手机的VoIP客户端 Sipdroid.rar Android有未接来电后处理(判断未接来电).rar Android模仿乐淘的应用程序分析源码.zip Android游戏源码——忍者快跑.rar Android自动发送短信.rar Android自动开关机实现.rar ...
Android 电池监控,已经是实现了,电池的监控和哪一些应用用电量如何,还是也已经实现了,手机的省电管理模式,也可以开始省电模式(管理),让您的手机app,可以使用的更久.rar,太多无法一一验证是否可用,程序如果...
android打开应用权限设置页(国内各大手机厂商适配终极工具类)
程序说明 -----------------------------... 小安任务助手是一款简单易用的任务管理软件,它可以使用户更方便的关闭正在运行的程序,显示手机CPU、内存、SD卡和电池状态等系统信息,还可用来卸载用户已安装的应用软件。
此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的...
Android手机的VoIP客户端 Sipdroid.rar Android无线点餐系统.rar Android模仿乐淘的应用程序分析源码.zip android电话、短信黑白名单拦截、电话录音.rar Android系统源码获取及编译.zip android项目实例 商业项目源...
6.2 手机电池计量还剩多少 306 6.3 群发拜年短信给联系人 309 6.4 开始与停止系统服务 312 6.5 通过短信发送e-mail通知 316 6.6 手机拨接状态 321 6.7 有来电,发送邮件通知 324 6.8 存储卡剩余...
Android Android Android Android 手机新概念 操作系统的选择 -------- 定制和长尾 � 重构 � MVC 和 Web APP 架构 Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐...
6.2 手机电池计量还剩多少 6.3 群发拜年短信给联系人 6.4 开始与停止系统服务 6.5 通过短信发送E-mail通知 6.6 手机拨接状态 6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现...
基于Android系统网络模块功耗...2. Android 系统中的电池管理和功耗优化技术 3. 移动互联网技术在 Android 系统中的应用 4. Android 系统中的系统功耗评估和分析方法 5. 基于 Android 系统的移动网络模块设计和实现技术
6.2 手机电池计量还剩多少 6.3 群发拜年短信给联系人 6.4 开始与停止系统服务 6.5 通过短信发送E-mail通知 6.6 手机拨接状态 6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现...
6.2 手机电池计量还剩多少 6.3 群发拜年短信给联系人 6.4 开始与停止系统服务 6.5 通过短信发送E-mail通知 6.6 手机拨接状态 6.7 有来电,发送邮件通知 6.8 存储卡剩余多少容量 6.9 访问本机内存与存储卡 6.10 实现...
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...
本文实例讲述了Android编程实现对电池状态的监视功能。分享给大家供大家参考,具体如下: 最近在开发一个与GPS相关的项目,因为其中涉及到了GPS的使用,众所周知,GPS是相当耗电的,因此就想着怎么能知道当前的电量...