摘要:本文将带你了解Android应用开发android 监听手机电量变化,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发android 监听手机电量变化,希望本文对大家学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 asticky broadcastcontaining the charging state, level, and other information about the battery. SeeBatteryManagerfor documentation on the contents of the Intent.
你不能像组件那样在manifests里声明一个receive ,你只能通过Context.registerReceiver()注册。. SeeACTION_BATTERY_LOW,ACTION_BATTERY_OKAY,ACTION_POWER_CONNECTED, andACTION_POWER_DISCONNECTEDfor 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.
Constant Value:android.intent.action.BATTERY_CHANGED
如果我们注册了对Intent.ACTION_BATTERY_CHANGED的监听,那么我们马上会收到一个Action为Intent.ACTION_BATTERY_CHANGED的intent,之后只要我们没有取消监听,一定电池发送变化,我们也会收到这样的intent。电池的信息,电压,温度,充电状态等等,都是由BatteryService来提供的。电池的这些信息是BatteryService通过广播 主动把数据传送给所关心的应用程序。
通过该intent的extra我们可以取得电池的很多信息,比如电压可以用如下的方式:voltage=intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,-1);
BatteryManager类列出了该intent的extra所包含的信息:
StringEXTRA_HEALTH: integer.它表示当前电池的健康状态。
可能的值为:
intBATTERY_HEALTH_COLD
intBATTERY_HEALTH_DEAD
intBATTERY_HEALTH_GOOD
intBATTERY_HEALTH_OVERHEAT
intBATTERY_HEALTH_OVER_VOLTAGE
intBATTERY_HEALTH_UNKNOWN
intBATTERY_HEALTH_UNSPECIFIED_FAILURE
StringEXTRA_ICON_SMALL: integer.the resource ID of a small status bar icon indicating the current battery state.
它是当前用于表示电池状态的icon的资源id.
StringEXTRA_LEVEL: integer.它表示电池当前的电量, 它介于0和EXTRA_SCALE之间.
StringEXTRA_PLUGGED: integer.它表示当前手机使用的是哪里的电源。
可能的值有:
0:表示电源是电池
intBATTERY_PLUGGED_AC:表示电源是AC charger.[应该是指充电器]。
intBATTERY_PLUGGED_USB:表示电源是USB port.
StringEXTRA_PRESENT: boolean.表示是否提供电池。有些手机在使用USB电源的情况下,即使拔出了电池,仍然可以正常工作。
StringEXTRA_SCALE: integer.表示电池电量的最大值.
StringEXTRA_STATUS: integer。表示电池的当前状态。
可能的值为:
intBATTERY_STATUS_CHARGING表示正在充电。
intBATTERY_STATUS_DISCHARGING
intBATTERY_STATUS_FULL表示充满
intBATTERY_STATUS_NOT_CHARGING表示没有充电
intBATTERY_STATUS_UNKNOWN表示未知状态。
StringEXTRA_TECHNOLOGY:表示电池使用的技术。比如,对于锂电池是Li-ion.
StringEXTRA_TEMPERATURE:integer 。表示当前电池的温度。
StringEXTRA_VOLTAGE: integer。表示当前电池的电压。.
另外还有两种intent专门用于表示电量低的情况
ACTION_BATTERY_LOW :表示当前电池电量低。
ACTION_BATTERY_OKAY:表示当前电池已经从电量低恢复为正常。
当手机电量发生改变时,系统会对外发送Intent的Action为android.intent.action.BATTERY_CHANGED常量的广播;当手机电量过低时,系统会对外发送Intent的Action为android.intent.action.BATTERY_LOW常量的广播。
当手机电池从电量不足状态恢复时,系统会对外发送Intent的Action为android.intent.action.BATTERY_OKAY常量的广播。
下面通过一个简单实例来演示:
Receiver:
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 {
@Override
public 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:
receiver android:name=com.home.receiver.BatteryReceiver>
在清单文件添加权限
这里可能需要注意一下,静态注册可能没有效果,版本较低的可能才有效果,版本叫高的只能动态注册。
android 监听手机电量变化就讲完了。
就这么简单。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号