android 监听手机电量变化
今天,简单讲讲如何监听手机电量的变化。
监听电量是不能静态注册的。
后来上网搜索,发现有五个不能静态注册的广播,这里记录一下,免得下次再后知后觉的发现并惊讶于自己的笨拙。
不能静态注册的广播:
android.intent.action.SCREEN_ON
android.intent.action.SCREEN_OFF
android.intent.action.BATTERY_CHANGED
android.intent.action.CONFIGURATION_CHANGED
android.intent.action.TIME_TICK
原因(有以下几种说法,提供给大家参考):
1.提高系统效率:这两个事件是android的基本事件,如果大多数程序监听,会大大的拖慢整个系统,所以android不鼓励我们在后台监听这两个事件。
2.因为有序广播的优先级问题。以上这些广播中,静态注册时,系统的优先级大于应用,并且系统阻止了广播的向下传播。又因在Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的。故用动态注册代替静态注册。
3.系统安全问题。
Intent.ACTION_BATTERY_CHANGED
This is a sticky broadcast containing the charging state, level, and other information about the battery. See BatteryManager
for documentation on the contents of the Intent.
你不能像组件那样在manifests里声明一个receive ,你只能通过Context.registerReceiver()注册。. See ACTION_BATTERY_LOW
,ACTION_BATTERY_OKAY
, ACTION_POWER_CONNECTED
, and ACTION_POWER_DISCONNECTED
for distinct battery-related broadcasts that are sent and can be received through manifest receivers.
This is a protected intent that can only be sent by the system.
当手机电池从电量不足状态恢复时,系统会对外发送Intent的Action为android.intent.action.BATTERY_OKAY常量的广播。
package com.home.receiver; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast; public class BatteryReceiver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) { if (Intent.ACTION_BATTERY_OKAY.equals(intent.getAction())) { Toast.makeText(context, "电量已恢复,可以使用!", Toast.LENGTH_LONG).show(); } if (Intent.ACTION_BATTERY_LOW.equals(intent.getAction())) { Toast.makeText(context, "电量过低,请尽快充电!", Toast.LENGTH_LONG).show(); } if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) { Bundle bundle = intent.getExtras(); // 获取当前电量 int current = bundle.getInt("level"); // 获取总电量 int total = bundle.getInt("scale"); StringBuffer sb = new StringBuffer(); sb.append("当前电量为:" + current * 100 / total + "%" + " "); // 如果当前电量小于总电量的15% if (current * 1.0 / total < 0.15) { sb.append("电量过低,请尽快充电!"); } else { sb.append("电量足够,请放心使用!"); } Toast.makeText(context, sb.toString(), Toast.LENGTH_LONG).show(); } } }
receiver android:name="com.home.receiver.BatteryReceiver"> <intent-filter> <action android:name="android.intent.action.BATTERY_CHANGED" /> <action android:name="android.intent.action.BATTERY_OKAY"/> <action android:name="android.intent.action.BATTERY_LOW"/> </intent-filter> </receiver>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
android 监听手机电量变化相关推荐
- Android监听手机网络变化
Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 <?xml version="1.0" encodi ...
- android 监听手机开机
今天,简单讲讲 android 监听手机开机. 需求描述:有些时候,我们需要我们的程序在开机后能自动运行,在系统即将关闭时,能写入一些记录到指定的文件里. 一.开机广播监听: Android系统 ...
- Android监听手机短信
Android监听手机短信的方法有两种,分别为: 1.接受系统的短信广播:当手机收到新消息时,会发送一条广播,通过该广播就可以获取短信内容: 2.监听短信数据库:利用观察者模式监听短信数据库,当短信数 ...
- Android监听手机返回键
Android在做项目时,有时候点击返回按钮没反应(有冲突),那就需要我们监听返回键.重写onKeyDown()方法: // 监听手机返回键 @Override public boolean onKe ...
- Android 监听系统语言变化
** 监听系统语言变化 ** 监听系统语言变化 首先先创建一个MyApplication继承Application public class MyApplication extends Applica ...
- Android 监听手机GPS打开状态
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70854942 本文出自[赵彦军的博客] GPS_Presenter package ...
- Android监听电池电量
第一步:创建一个广播接收者,继承自BroadcastReceiver private class BatteryLevelReceiver extends BroadcastReceiver{ @Or ...
- android 监听手机屏幕唤醒和睡眠广播
最近做APP要做一个android 手机屏幕唤醒和睡眠的监听. 但发现下面问题: 我想获取调用屏幕打开时应用.在我 AndroidManifest.xml 已经指定:android.intent.ac ...
- Android 监听手机按下Home键
系统本身有这个广播,只需要监听这个广播就可以了! private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() { ...
最新文章
- MySQL 条件查询 limit、in、between and、like等等
- 【NetApp】NetBoot的使用方法
- vue 的常用模块安指令(持续记录)
- 注意!这些行为均涉嫌科研不端!
- php怎样连接上数据库服务器,php怎样连接数据库
- 【MySQL】MySQL EXPLAIN用法和结果
- 关于“工作组管理员”
- [编织消息框架][消息处理模式]管道模式
- html前端论文参考文献,web前端论文参考文献
- idea分支切换注意事项
- 边云协同的优点_与云端握手 是时候谈谈边云协同这个边缘计算新风向了
- 四川bh百汇云商城运营中
- HTML+CSS绘制太阳系九大行星运行轨迹
- ie8 ajax拒绝访问的解决办法
- micropython中文社区 microbit_microbit如何烧录micropython固件
- 面向对象学习笔记1 - 人狗大战
- java 判断日期是否为今天
- CPGAVAS2|叶绿体注释工具
- 【c语言训练】尼科切斯定理的验证
- 传智专修学院推出颠覆式办学模式,专注实用技能型人才培养