为了解决电池图标的问题,顺带看了看电池信息的获取方法 ;自己写了一个小栗子,来验证一下效果

电池的信息,一般都在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 - 电池状态的更多相关文章

  1. Android监听电池状态

    监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: (1)连接USB时的状态 (2)断开USB时的状态 ...

  2. android 获得电池状态

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  3. Android虚拟机电池状态设置

    问题描述: 安装SDK后使用AVD配合APPIUM进行测试,此时虚拟机的电池状态为0%充电中:部分APP会对手机电池状态有要求,不符合要求时,无法安装或打开. 解决思路: 1.Android系统设置( ...

  4. 几个有趣的WEB设备API 前端提高B格必备(一)——电池状态&震动api

    受到同事启发,突然发现了几个有趣又实用的web api,没想到前端还有这么多有趣的东西可以玩~~简直过分. 1.电池状态API navigator.getBattery():这个api返回的是一个pr ...

  5. android电池管理系统从上层的java到底层驱动的调用(转载)

    1.概述 随着移动智能设备的快速发屏,电池的续航能力在很大情况下诱导了大众消费者的购买选择,android系统对电源管理的合理与否直接影响到电池的续航能力,而电池系统作为其中的一部分,主要用于对电池状 ...

  6. android电池信息简介

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

  7. 【转】android电池(五):电池 充电IC(PM2301)驱动分析篇

    关键词:android 电池  电量计  PL2301任务初始化宏 power_supply 中断线程化 平台信息:内核:linux2.6/linux3.0系统:android/android4.0  ...

  8. 【转】android电池(四):电池 电量计(MAX17040)驱动分析篇

    关键词:android 电池  电量计  MAX17040 任务初始化宏 power_supply 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台: ...

  9. 【转】android 电池(三):android电池系统

    关键词:android电池系统电池系统架构 uevent power_supply驱动 平台信息: 内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...

随机推荐

  1. C++抽象编程·运算符重载与友元函数

    运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其 ...

  2. SSO框架介绍前篇

    SSO全程是single sign on,即单点登录,是一种统一认证和授权机制.   单点登录,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其 ...

  3. postgresql 多表联查

    使用语句的先后顺序并不是优先级的排序: 连接分为:内连接和外连接,外连接分为左外连接,右外连接,全连接 概念上解释,表之间联合后数据如何整合. 返回的数据条数,可以通过集合求算.假如A集合有10条数据 ...

  4. 使用jedis实现Redis消息队列(MQ)的发布(publish)和消息监听(subscribe)

    前言: 本文基于jedis 2.9.0.jar.commons-pool2-2.4.2.jar以及json-20160810.jar 其中jedis连接池需要依赖commons-pool2包,json ...

  5. linux系统最常用命令(持续更新)

    1.重启服务器 ubuntu系统重启apache:/etc/init.d/apache2 restart linux重启nginx: service nginx restart 重新加载:servic ...

  6. 原生javascript 制作canvas 验证码

    <canvas id="></canvas> <a href="#" id="changeImg">看不清,换一张 ...

  7. 几种Android数据序列化方案

    一.引言 数据的序列化在Android开发中占据着重要的地位,无论是在进程间通信.本地数据存储又或者是网络数据传输都离不开序列化的支持.而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响. ...

  8. Intel VT-x 处于禁用状态

    出现错误"此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态"的问题,如下图. Intel VT-x 即Virtualization Technology, ...

  9. 愚公oracle数据库同步工具

    最近,利用一些时间对oracle数据库实时同步工具做了一些调研分析,主要关注了linkedin的databus和阿里的yugong两个中间件,其中databus需要在每个待同步的表上增加额外的列和触发 ...

  10. java 获得当前时间 年月日时分秒 星期几

    <%SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");//设置日期格式SimpleDat ...