Android - 电池状态
为了解决电池图标的问题,顺带看了看电池信息的获取方法 ;自己写了一个小栗子,来验证一下效果
电池的信息,一般都在BatteryManager里面,信息是用广播发出的。我们更新信息需要一个广播接收器
注册一个广播接收器,接收 Intent.ACTION_BATTERY_CHANGED ,从intent中读出想要的电池信息
比如 BatteryManager.EXTRA_STATUS BatteryManager.BATTERY_STATUS_CHARGING 等等
在Android 5.1中,电池信息可以在Settings - Battery 里面找到
package com.example.chargingwatching;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView chargeStatus;
private TextView LevelDigit;
private TextView percentView;
private int rustLevel = 0; /* battery level */
private int windowWidth = 0;
private WindowManager mWindowManager;
private BroadcastReceiver mBatteryStatuReceiver = new BroadcastReceiver() {
int status; // current battery status
int plugType;
public void onReceive(Context context, Intent intent) {
rustLevel = (int)(100f
* intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0)
/ intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100));
LevelDigit.setText(" " + rustLevel + "%");
percentView.setWidth((int)(windowWidth * rustLevel /100));
status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
BatteryManager.BATTERY_STATUS_UNKNOWN);
plugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
if(status == BatteryManager.BATTERY_STATUS_CHARGING) {
if(plugType == BatteryManager.BATTERY_PLUGGED_AC) {
chargeStatus.setText(R.string.ac_charging);
} else if (plugType == BatteryManager.BATTERY_PLUGGED_USB) {
chargeStatus.setText(R.string.usb_charging);
}
} else if (status == BatteryManager.BATTERY_STATUS_FULL) {
if(plugType == BatteryManager.BATTERY_PLUGGED_AC) {
chargeStatus.setText(R.string.full_ac);
} else if (plugType == BatteryManager.BATTERY_PLUGGED_USB) {
chargeStatus.setText(R.string.full_usb);
}
} else if(status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {
chargeStatus.setText(R.string.uncharge);
} else if(status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
chargeStatus.setText(R.string.discharging);
} else {
chargeStatus.setText(R.string.unknown);
}
}
};
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.watch_charging);
chargeStatus = (TextView)findViewById(R.id.tv_charge);
LevelDigit = (TextView) findViewById(R.id.tv_battery_level_digit);
percentView = (TextView) findViewById(R.id.percent_view);
mWindowManager = this.getWindowManager();
windowWidth = mWindowManager.getDefaultDisplay().getWidth();
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
registerReceiver(mBatteryStatuReceiver, filter);
}
}
以下是简单的布局文件
主体是LinearLayout,放一个TextView来显示电池状态,一个TextView来显示电量百分比
一个简陋的电量条,拿TextView来冒充的
<?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:orientation="vertical" >
<TextView
android:id="@+id/tv_charge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Detecting..."
android:textSize="20sp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv_battery_level"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/battery_level"
android:textSize="20sp"/>
<TextView
android:id="@+id/tv_battery_level_digit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="20sp"/>
</LinearLayout>
<TextView
android:id="@+id/percent_view"
android:layout_height="20dp"
android:layout_width="wrap_content"
android:background="#00AA00"
/>
</LinearLayout>

Android - 电池状态的更多相关文章
- Android监听电池状态
监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: (1)连接USB时的状态 (2)断开USB时的状态 ...
- android 获得电池状态
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- Android虚拟机电池状态设置
问题描述: 安装SDK后使用AVD配合APPIUM进行测试,此时虚拟机的电池状态为0%充电中:部分APP会对手机电池状态有要求,不符合要求时,无法安装或打开. 解决思路: 1.Android系统设置( ...
- 几个有趣的WEB设备API 前端提高B格必备(一)——电池状态&震动api
受到同事启发,突然发现了几个有趣又实用的web api,没想到前端还有这么多有趣的东西可以玩~~简直过分. 1.电池状态API navigator.getBattery():这个api返回的是一个pr ...
- android电池管理系统从上层的java到底层驱动的调用(转载)
1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统对电源管理的合理与否直接影响到电池的续航能力,而电池系统作为其中的一部分,主要用于对电池状 ...
- android电池信息简介
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 【转】android电池(五):电池 充电IC(PM2301)驱动分析篇
关键词:android 电池 电量计 PL2301任务初始化宏 power_supply 中断线程化 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 ...
- 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
关键词:android 电池 电量计 MAX17040 任务初始化宏 power_supply 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台: ...
- 【转】android 电池(三):android电池系统
关键词:android电池系统电池系统架构 uevent power_supply驱动 平台信息: 内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...
随机推荐
- Java IO流之普通文件流和随机读写流区别
普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...
- Java之进程与线程
一.进程 二.线程 1.定义及特点 1)[定义]线程是一个进程内部的一条执行路径,Java虚拟机允许应用程序并发地运行多个执行路径 是系统独立调度和分派[CPU]的基本单位 2)特点 进程中执行运算的 ...
- nodejs 路径
在学习的时候遇到了 一些路劲方面的疑惑 便查询了一些 module.filename:开发期间,该行代码所在的文件.__filename:始终等于 module.filename.__dirname: ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(上)
环境:ubuntu 16.04 Docker 17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...
- java计算某个日期是什么节气(24节气)
package com.test; import java.util.Calendar; import java.util.Date; /** * Created by json */ public ...
- 【转载】图文详解 IntelliJ IDEA 15 创建普通 Java Web 项目
第 1 部分:新建一个 Java Web Application 项目 File -> New -> Project-,请选择 Java EE 这个模块下的 Web Application ...
- PHP:win7 ASP.NET环境与PHP(WAMP)环境如何共存
经验地址:http://jingyan.baidu.com/article/495ba8410f794d38b30ede89.html 笔记本以前安装过asp.net,启用了Windows的IIS服务 ...
- JS 冒泡排序从学到优化
目的:理解算法 深化算法 冒泡排序: 直接上动图好于文字 一个冒泡实例 45,67,23,88,21,6,99// 第一轮 6次// 45 67 23 88 21 6 99// 45 23 67 88 ...
- EF编辑
//修改推荐的信息 var productRe = db.Shop_ProductRecommends.Single(item => item.Id == model.Id); productR ...
- AngularJS高级程序设计读书笔记 -- 指令篇 之 内置指令
1. 内置指令(10-12 章) AngularJS 内置超过 50 个内置指令, 包括 数据绑定,表单验证,模板生成,时间处理 和 HTML 操作. 指令暴露了 AngularJS 的核心功能, 如 ...