Android 显示手机电池的当前电量
2014-04-27 23:16
381 查看
From:/article/11368764.html
下这之前先说点显示电量的基本知识:
1、Android的上层实现显示手机电池电量是通过监听实现,当电池电量改变时会通知到程序。
当然这个有朋友就要问了我不是想监听电池电量,我是想直接获取当前的电池电量。
其实这是同一个问题,当你在初始化监听器的时候他会自动首先获取电池的电量信息,然后后续当电池改变时同时也会通知当前电池电量的改变情况。
代码:
[java] view
plaincopy
package com.jli.battery;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
public class Main extends Activity {
private ImageView tvBatteryChanged;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvBatteryChanged = (ImageView)findViewById(R.id.test);
//注册一个接受广播类型
registerReceiver(new BatteryBroadcastReceiver(), new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
/**接受电量改变广播*/
class BatteryBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
int curPower = (level * 100 / scale)/25;
switch (curPower) {
case 0:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power0));
break;
case 1:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power1));
break;
case 2:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power2));
break;
case 3:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power3));
break;
case 4:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power4));
break;
}
}
}
}
}
Xml:
[xhtml] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jli.battery"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".Main$BatteryUpDateService"/>
</application>
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-sdk android:minSdkVersion="8" />
</manifest>
上面只是实现显示电源的电量的简单例子,源码放于末尾。
这里补充如果还涉及到充电放电等状态处理的一些源码资料请不要粘贴复制,下面代码是不能运行的,自己看懂了后在例子里添加。
[java] view
plaincopy
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
int intLevel = 0;
int intScale = 0;
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
/*
* 如果捕捉到的action是ACTION_BATTERY_CHANGED, 就运行onBatteryInfoReceiver()
*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
intLevel = intent.getIntExtra("level", 0);
intScale = intent.getIntExtra("scale", 100);
// 电池伏数
Log.d("Battery V", "" + intent.getIntExtra("voltage", 0));
// 电池温度
Log.d("Battery T", "" + intent.getIntExtra("temperature", 0));
BatteryV = "当前电压为:" + intent.getIntExtra("voltage", 0);
BatteryT = "当前温度为:" + intent.getIntExtra("temperature", 0);
switch (intent.getIntExtra("status",
BatteryManager.BATTERY_STATUS_UNKNOWN)) {
case BatteryManager.BATTERY_STATUS_CHARGING:
BatteryStatus = "充电状态";
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
BatteryStatus = "放电状态";
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
BatteryStatus = "未充电";
break;
case BatteryManager.BATTERY_STATUS_FULL:
BatteryStatus = "充满电";
break;
case BatteryManager.BATTERY_STATUS_UNKNOWN:
BatteryStatus = "未知道状态";
break;
}
switch (intent.getIntExtra("plugged",
BatteryManager.BATTERY_PLUGGED_AC)) {
case BatteryManager.BATTERY_PLUGGED_AC:
BatteryStatus2 = "AC充电";
break;
case BatteryManager.BATTERY_PLUGGED_USB:
BatteryStatus2 = "USB充电";
break;
}
switch (intent.getIntExtra("health",
BatteryManager.BATTERY_HEALTH_UNKNOWN)) {
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
BatteryTemp = "未知错误";
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
BatteryTemp = "状态良好";
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
BatteryTemp = "电池没有电";
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
BatteryTemp = "电池电压过高";
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
BatteryTemp = "电池过热";
break;
}
}
}
};
BatteryPlugin.zip
下这之前先说点显示电量的基本知识:
1、Android的上层实现显示手机电池电量是通过监听实现,当电池电量改变时会通知到程序。
当然这个有朋友就要问了我不是想监听电池电量,我是想直接获取当前的电池电量。
其实这是同一个问题,当你在初始化监听器的时候他会自动首先获取电池的电量信息,然后后续当电池改变时同时也会通知当前电池电量的改变情况。
代码:
[java] view
plaincopy
package com.jli.battery;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
public class Main extends Activity {
private ImageView tvBatteryChanged;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvBatteryChanged = (ImageView)findViewById(R.id.test);
//注册一个接受广播类型
registerReceiver(new BatteryBroadcastReceiver(), new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
/**接受电量改变广播*/
class BatteryBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
int curPower = (level * 100 / scale)/25;
switch (curPower) {
case 0:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power0));
break;
case 1:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power1));
break;
case 2:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power2));
break;
case 3:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power3));
break;
case 4:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power4));
break;
}
}
}
}
}
Xml:
[xhtml] view
plaincopy
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jli.battery"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".Main$BatteryUpDateService"/>
</application>
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-sdk android:minSdkVersion="8" />
</manifest>
上面只是实现显示电源的电量的简单例子,源码放于末尾。
这里补充如果还涉及到充电放电等状态处理的一些源码资料请不要粘贴复制,下面代码是不能运行的,自己看懂了后在例子里添加。
[java] view
plaincopy
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
int intLevel = 0;
int intScale = 0;
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
/*
* 如果捕捉到的action是ACTION_BATTERY_CHANGED, 就运行onBatteryInfoReceiver()
*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
intLevel = intent.getIntExtra("level", 0);
intScale = intent.getIntExtra("scale", 100);
// 电池伏数
Log.d("Battery V", "" + intent.getIntExtra("voltage", 0));
// 电池温度
Log.d("Battery T", "" + intent.getIntExtra("temperature", 0));
BatteryV = "当前电压为:" + intent.getIntExtra("voltage", 0);
BatteryT = "当前温度为:" + intent.getIntExtra("temperature", 0);
switch (intent.getIntExtra("status",
BatteryManager.BATTERY_STATUS_UNKNOWN)) {
case BatteryManager.BATTERY_STATUS_CHARGING:
BatteryStatus = "充电状态";
break;
case BatteryManager.BATTERY_STATUS_DISCHARGING:
BatteryStatus = "放电状态";
break;
case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
BatteryStatus = "未充电";
break;
case BatteryManager.BATTERY_STATUS_FULL:
BatteryStatus = "充满电";
break;
case BatteryManager.BATTERY_STATUS_UNKNOWN:
BatteryStatus = "未知道状态";
break;
}
switch (intent.getIntExtra("plugged",
BatteryManager.BATTERY_PLUGGED_AC)) {
case BatteryManager.BATTERY_PLUGGED_AC:
BatteryStatus2 = "AC充电";
break;
case BatteryManager.BATTERY_PLUGGED_USB:
BatteryStatus2 = "USB充电";
break;
}
switch (intent.getIntExtra("health",
BatteryManager.BATTERY_HEALTH_UNKNOWN)) {
case BatteryManager.BATTERY_HEALTH_UNKNOWN:
BatteryTemp = "未知错误";
break;
case BatteryManager.BATTERY_HEALTH_GOOD:
BatteryTemp = "状态良好";
break;
case BatteryManager.BATTERY_HEALTH_DEAD:
BatteryTemp = "电池没有电";
break;
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
BatteryTemp = "电池电压过高";
break;
case BatteryManager.BATTERY_HEALTH_OVERHEAT:
BatteryTemp = "电池过热";
break;
}
}
}
};
BatteryPlugin.zip
相关文章推荐
- Android 显示手机电池的当前电量
- Android 显示手机电池的当前电量
- 如何修改android手机电池容量显示信息
- android 显示电池电量
- android 显示电池电量
- Android应用开发获取手机电池电量的简单方法
- 获取当前手机的电池充电状态以及当前的电量
- android中获取电池当前电量
- Android获取手机电池电量用法实例
- Android 获取 Wifi 信号强度,检测是 Wifi 或者流量,获取手机电池电量及充电状态
- Android 4.4 电池电量显示相关
- Android 4.4 电池电量显示相关。
- android 电池状态侦听显示 电量 充电动态显示
- android 电池状态侦听显示 电量 充电动态显示
- android 电池电量检测,充电显示效果
- Android之手机电池电量应用
- Android 获取 Wifi 信号强度,检测是 Wifi 或者流量,获取手机电池电量及充电状态
- android 4.4 batteryservice 电池电量显示分析
- Android显示电量——自定义电池View
- Android 获取当前手机电量