PowerManager是Android平台中用于管理控制设备电源状态、重启、休眠状态、唤醒等,使用该API会影响到电池的待机时间,所以无非必要,一般不要使用。

  在PowerManager中有几个比较重要的公共方法,具体如下:

  方法goToSleep、reboot、userActivity需要用到如下权限:

<uses-permission android:name="android.permission.REBOOT"/>
<uses-permission android:name="android.permission.DEVICE_POWER"/>

  而这两个权限只有系统App才可使用。

  最重要的方法还是newWakeLock,通过该方法,我们可以获取一个WakeLock对象,通过该对象我们可以控制设备电源的状态。方法的第一个参数flags用于指示获取哪种WakeLock,不同的Lock对cpu、屏幕、键盘灯有不同的影响,flag的值如下:

下面我们通过一个案例来说明WakeLock的用法,具体代码如下:

public class PowerManagerActivity extends ActionBarActivity {private PowerManager powerManager;private PowerManager.WakeLock wakeLock;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_power_manager);powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);}private void acquireWakeLock(){wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"wakelock");if(wakeLock!=null)wakeLock.acquire();}private void releaseWakeLock(){if(wakeLock!=null)wakeLock.release();}@Overrideprotected void onResume() {super.onResume();acquireWakeLock();}@Overrideprotected void onPause() {super.onPause();releaseWakeLock();}
}

  使用该方法需要用到如下权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

  代码比较简单,在获取WakeLock的时候我们使用了PowerManager.SCREEN_BRIGHT_WAKE_LOCK,该flag表明cpu保持运行,屏幕保持常亮。同时注意WakeLock的acquire方法和release方法要成对使用,在这里利用了Activity的生命周期方法。
  还要注意的是WakeLock是Activity级别的不是针对整个Application的。
  要想获取电池信息比如状态、健康信息、电池容量等,我们可以通过注册一个广播接收者用来接收Intent.ACTION_BATTERY_CHANGED广播即可,当电池发送变化的时候,系统就会发出该广播。Android提供了BatteryManager类,该类主要提供了一些常量,用于从广播的Intent中提取相关的数据,常量列表如下:

定义一个广播接收者,用于检测电池状态的变化,关键代码如下:
private class BattaryReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){//电池状态int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS,0);String statusString = "";switch (status){case BatteryManager.BATTERY_STATUS_FULL:statusString="full";break;case BatteryManager.BATTERY_STATUS_CHARGING:statusString="charging";break;case BatteryManager.BATTERY_STATUS_DISCHARGING:statusString="discharging";break;case BatteryManager.BATTERY_STATUS_UNKNOWN:statusString="unknown";break;case BatteryManager.BATTERY_STATUS_NOT_CHARGING:statusString="not charging";break;}//
        boolean present= intent.getBooleanExtra(BatteryManager.EXTRA_PRESENT,false);//integer field containing the current battery level,int curlevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);// integer containing the maximum battery levelint maxLevel = intent.getIntExtra(BatteryManager.EXTRA_SCALE,0);//String describing the technology of the current batteryString technology = intent.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);//integer containing the current health constantint health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0);String healthStr = "";switch (health){case BatteryManager.BATTERY_HEALTH_COLD:healthStr="cold";break;case BatteryManager.BATTERY_HEALTH_DEAD:healthStr="dead";break;case BatteryManager.BATTERY_HEALTH_GOOD:healthStr="good";break;case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:healthStr="voer voltage";break;case BatteryManager.BATTERY_HEALTH_UNKNOWN:healthStr="unknown";break;case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:healthStr="unspecified failure";break;}//integer containing the resource ID of a small status bar icon indicating the current battery stateint smallIcon = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0);//integer indicating whether the device is plugged in to a power source; 0 means it is on battery,// other constants are different types of power sourcesint plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0);String pluggedStr="";switch (plugged){case BatteryManager.BATTERY_PLUGGED_AC:pluggedStr="AC";break;case BatteryManager.BATTERY_PLUGGED_USB:pluggedStr="USB";break;case BatteryManager.BATTERY_PLUGGED_WIRELESS:pluggedStr="wireless";break;}// integer containing the current battery temperature.int temperature= intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0);// integer containing the current battery voltage level.int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0);StringBuilder sb = new StringBuilder("status:");sb.append(statusString);sb.append("\n");sb.append("present:").append(present);sb.append("\n");sb.append("level:").append(curlevel);sb.append("\n");sb.append("maxLevel:").append(maxLevel);sb.append("\n");sb.append("technology:").append(technology);sb.append("\n");sb.append("health:").append(healthStr);sb.append("\n");sb.append("icon:").append(smallIcon);sb.append("\n");sb.append("plugged:").append(pluggedStr);sb.append("\n");sb.append("temperature:").append(temperature);sb.append("\n");sb.append("voltage:").append(voltage);sb.append("\n");Message msg= mHandler.obtainMessage(1);msg.obj = sb.toString();mHandler.sendMessage(msg);}
}
}

主要接收该广播需要用到权限:

<uses-permission android:name="android.permission.BATTERY_STATS"/>

  案例运行结果如下:

作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/ 
版权声明:本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
技术咨询:

转载于:https://www.cnblogs.com/jerehedu/p/4876842.html

Android之PowerManagerBatteryManager相关推荐

  1. Unity5.6+ 导出Android 应用程序apk的环境配置及导出过程

    首先下载并安装安卓SDK和java的JDK 安卓sdk下载: http://www.android-studio.org/ 也可以在这下载: 链接:http://pan.baidu.com/s/1bp ...

  2. Android 的NDK的Makefile编写

    Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...

  3. Android Animation (安卓动画)概念简介

    Android Animation Android 四种动画分别为逐帧动画和补间动画.属性动画.过渡动画: Frame Animation (逐帧动画) 实现方式:xml 和 Java代码 图片跳转的 ...

  4. 基于Android和SpringBoot的购物App

    (Shopping)购物应用商城 本软件使用Android和SpringBoot.JavaWeb技术实现:并结合百度LBS平台的SDK.支付宝App支付客户端SDK.MobTech的ShareSDK: ...

  5. Android数据持久化:SharePreference

    SharePreference:作为Android数据持久化的一种,具有一定的便捷性,适合存储一些体积小的数据. 存储数据方式:键值对的方式,类似于Map: 利用SharePreference.Edi ...

  6. Android数据持久化:文件存储

    数据持久化: 数据可分为瞬时数据和关键数据.保存在内存之中的数据是瞬时数据,而对于一些关键性数据,后期需要持续使用的,应当保存在存储设备中: 持久化保存方式: 文件存储.SharePreference ...

  7. Android Studio中RecycerView依赖库加载问题

    依赖包导入思考: 参考资料:recycleview导包问题 打开修改本项目中的build.gradle; 切勿着急添加包,应当提前查看其中的版本号(因为加载的v7包要和其版本保持一致性): 例如: 因 ...

  8. Android布局优化之include、merge、ViewStub

    include:引入重复使用的相同布局 merge:减少include布局的层级,将子元素直接添加到merge标签的parent中 ViewStub:其实就是一个宽高都为0的一个View,它默认是不可 ...

  9. Android动画之帧动画和补间动画

    Android系统提供三种动画:帧动画.补间动画和属性动画.这里先分析总结帧动画和补间动画. FrameAnimation 帧动画,通俗来说就是按照图片动作顺序依次播放来形成动画,创建帧动画可以用 x ...

最新文章

  1. js中Object类型和Array类型的变量被赋值(复制)给其他变量后,修改被赋值(复制)的新变量的值,会影响原始变量的值,这是为什么呢?
  2. mysql 锁语句_mysql-笔记 事务 锁 语句
  3. vc连接数据库,对数据的基本操作
  4. java基础学习(5)-continue与break
  5. Python | [a for b in c for a in b]的用法
  6. 苹果外包爆料:你手机里的Siri,听到了嘿嘿嘿的声音
  7. 1045 快速排序 (25 分)
  8. http代码_一行代码就可以实现HTTP文件服务器,他为什么写了150行?
  9. Objective-C 2.0 with Cocoa Foundation--- 9,内存管理
  10. 信息系统项目管理04——项目整体管理
  11. 如何使用git merge --squash?
  12. .NET中获取电脑名、IP地址及用户名方法
  13. Android WebView白屏解决方案
  14. 2019最新计算机配置,2019年电脑配置推荐,收藏一篇文章就够了
  15. Window上装Linux系统的便捷方法,简单又省事!
  16. imac2017拆机
  17. ajax串数组包含双引号,解决AJAX请求中含有数组的办法
  18. 利用SSRF攻击Redis
  19. 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装
  20. 美国TSCA 法案管控产品中的几种PBT化学品

热门文章

  1. python机械臂仿真_VTK与Python实现机械臂三维模型可视化详解
  2. glance系列一:glance基础
  3. 读后感:你的灯亮着吗
  4. wpf 客户端【JDAgent桌面助手】开发详解(四) popup控件的win8.0的bug
  5. openjdk需要自己添加cacerts,
  6. Samba在CentOS下的图形化界面的安装
  7. 粒子滤波 演示与opencv代码
  8. Tone Mapping
  9. DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
  10. 关于Android Studio里的Gradle文件