Android应用开发android 监听手机电量变化
白羽 2019-03-15 来源 :网络 阅读 953 评论 0

摘要:本文将带你了解Android应用开发android 监听手机电量变化,希望本文对大家学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频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程