`

获取Android设备电池电量状态

 
阅读更多



Android开发者可以利用BroadcastReceiver机制,获取电池电量变化的ACTION_BATTERY_CHANGED intent,进而获取当前android设备的电池状态。
具体操作步骤:
1. 创建一个监听ACTION_BATTERY_CHANGED事件的intentFilter。
2. 创建一个BroadcastReceiver对象,该对象可以接收broadcast intent。
3. 注册BroadcastReceiver对象来监听ACTION_BATTERY_CHANGED事件。
4. 在BroadcastReceiver对象中,重写onReceive方法,在onReceive方法的传入参数intent里获取需要的电池状态信息。

5. 在生命周期结束时,取消step4中的注册。

Demo下载


最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:http://android.myapp.com/myapp/detail.htm?apkName=com.shandong.mm.androidstudy,源码例子文档一网打尽。

java代码
package mm.shandong.com.testbattery;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;



import java.util.ArrayList;

public class TestBatteryActivity extends AppCompatActivity {
    BatteryChangedReceiver batteryChangedReceiver;
    Button btn_register;
    Button btn_unregister;
    TextView tv_heath;
    TextView tv_level;
    TextView tv_maxlevel;
    TextView tv_pluged;
    TextView tv_status;
    TextView tv_other;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_battery);
        tv_heath= (TextView) findViewById(R.id.tv_heath);
        tv_level= (TextView) findViewById(R.id.tv_level);
        tv_maxlevel= (TextView) findViewById(R.id.tv_maxlevel);
        tv_pluged= (TextView) findViewById(R.id.tv_pluged);
        tv_status= (TextView) findViewById(R.id.tv_status);
        tv_other= (TextView) findViewById(R.id.tv_other);
        batteryChangedReceiver=new BatteryChangedReceiver();
        btn_register= (Button) findViewById(R.id.btn_register);
        btn_unregister= (Button) findViewById(R.id.btn_unregister);
        btn_unregister.setEnabled(false);
    }
    //注册电量监听的Broadcastreceiver
    public void registBatter(View view){
        IntentFilter intentFilter=getFilter();
        registerReceiver(batteryChangedReceiver,intentFilter);
        btn_register.setEnabled(false);
        btn_unregister.setEnabled(true);
        Toast.makeText(this,
                "电量变化的receiver已经注册成功"
                ,Toast.LENGTH_SHORT).show();
    }
    //取消注册电量监听的Broadcastreceiver
    public void unRegistBatter(View view){
        unregisterReceiver(batteryChangedReceiver);
        btn_register.setEnabled(true);
        btn_unregister.setEnabled(false);
        Toast.makeText(this,"电量变化的receiver已经取消注册",
                Toast.LENGTH_SHORT).show();
    }
    ///获取IntentFilter对象
    private IntentFilter getFilter() {
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
        filter.addAction(Intent.ACTION_BATTERY_LOW);
        filter.addAction(Intent.ACTION_BATTERY_OKAY);
        return filter;
    }
    public class BatteryChangedReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            final String action = intent.getAction();
            if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_CHANGED)) {
                // 当前电池的电压
                int voltage = intent.
                        getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1);
                // 电池的健康状态
                int health = intent.
                        getIntExtra(BatteryManager.EXTRA_HEALTH, -1);
                switch (health) {
                    case BatteryManager.BATTERY_HEALTH_GOOD:
                        tv_heath.setText("很好");
                    case BatteryManager.BATTERY_HEALTH_COLD:
                        tv_heath.setText("BATTERY_HEALTH_COLD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_DEAD:
                        tv_heath.setText("BATTERY_HEALTH_DEAD");
                        break;
                    case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                        tv_heath.setText("BATTERY_HEALTH_OVERHEAT");
                        break;
                    case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                        tv_heath.setText("BATTERY_HEALTH_OVER_VOLTAGE");
                        break;
                    case BatteryManager.BATTERY_HEALTH_UNKNOWN:
                        tv_heath.setText("BATTERY_HEALTH_UNKNOWN");
                        break;
                    case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
                        tv_heath.
                            setText("BATTERY_HEALTH_UNSPECIFIED_FAILURE");
                        break;
                    default:
                        break;
                }
                // 电池当前的电量, 它介于0和 EXTRA_SCALE之间
                int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
                tv_level.setText(String.valueOf(level));
                // 电池电量的最大值
                int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
                tv_maxlevel.setText(String.valueOf(scale));
                // 当前手机使用的是哪里的电源
                int pluged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
                switch (pluged) {
                    case BatteryManager.BATTERY_PLUGGED_AC:
                        // 电源是AC charger.[应该是指充电器]
                        tv_pluged.setText("电源是AC charger.");
                        break;
                    case BatteryManager.BATTERY_PLUGGED_USB:
                        // 电源是USB port
                        tv_pluged.setText("电源是USB port");
                        break;
                    default:
                        break;
                }
                int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
                switch (status) {
                    case BatteryManager.BATTERY_STATUS_CHARGING:
                        // 正在充电
                        tv_status.setText("正在充电");
                        break;
                    case BatteryManager.BATTERY_STATUS_DISCHARGING:
                        tv_status.setText("BATTERY_STATUS_DISCHARGING");
                        break;
                    case BatteryManager.BATTERY_STATUS_FULL:
                        // 充满
                        tv_status.setText("充满");
                        break;
                    case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
                        // 没有充电
                        tv_status.setText("没有充电");
                        break;
                    case BatteryManager.BATTERY_STATUS_UNKNOWN:
                        // 未知状态
                        tv_status.setText("未知状态");
                        break;
                    default:
                        break;
                }
                // 电池使用的技术。比如,对于锂电池是Li-ion
                String technology = intent.
                        getStringExtra(BatteryManager.EXTRA_TECHNOLOGY);
                // 当前电池的温度
                int temperature = intent.
                        getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
                String str= "voltage = " + voltage + " technology = "
                        + technology + " temperature = " + temperature;
                tv_other.setText(str);
            } else if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_LOW)) {
                // 表示当前电池电量低
            } else if (action.equalsIgnoreCase(Intent.ACTION_BATTERY_OKAY)) {
                // 表示当前电池已经从电量低恢复为正常
                System.out.println(
                     "BatteryChangedReceiver ACTION_BATTERY_OKAY---");
            }
        }

    }


}




分享到:
评论

相关推荐

    【Android】获取电池电量

    Android 获取电池电量是 Android 应用程序开发中一个常见的需求,通过获取电池电量,可以实现在手机电池电量低时发出警告,或者在电池电量不足时提醒用户充电。Android 系统中提供了多种方式来获取电池电量,本文将...

    Android自定义显示电池电量

    在Android系统中,电池电量的显示通常是系统默认的,但有时候开发者或用户可能希望自定义电池电量的展示方式,以实现独特的UI效果或者更个性化的交互体验。本篇将深入探讨如何在Android应用中实现自定义电池电量的...

    android 获取电池电量程序

    总之,开发一个Android电池电量程序的关键在于理解和使用BatteryManager服务,以及正确注册和处理ACTION_BATTERY_CHANGED广播。这样,你就可以获取并显示设备电池的各种状态信息,为用户提供实用的功能。

    Android显示电池电量例子

    在Android平台上,开发一款应用程序来显示设备的电池...通过这个示例,你应该对如何获取和显示Android设备电池电量有了全面的了解。记住,实践是最好的老师,动手尝试编写代码并调试,你会更深入地掌握这个功能的实现。

    Qt获取并显示电池电量和WIFI信号强度

    在本文中,我们将深入探讨如何使用Qt框架在Windows 7环境下获取并显示电池电量和Wi-Fi信号强度。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。通过Qt,开发者可以使用C++语言创建美观且...

    Android 电池电量进度条,上下滚动图片的进度条(battery)

    在Android开发中,创建一个模拟真实手机电池电量进度的组件是一项常见的需求,它可以提供用户友好的界面反馈。本文将深入探讨如何实现一个上下滚动的电池电量进度条,并根据电量百分比进行动态更新。 首先,我们...

    android 类型电池电量进度条

    在Android开发中,电池电量进度条是用户界面中常见的组件,用于显示设备当前电池状态的百分比。在本文中,我们将深入探讨如何在Android应用中实现一个自定义的"android类型电池电量进度条",以及相关的设计和实现...

    获取电池电量

    总之,获取电池电量并根据状态进行操作是设备管理的重要环节,它涉及操作系统底层的电源管理机制、开发者使用的API以及测试过程中的模拟工具。通过理解和利用这些技术,我们能够实现更智能、更节能的设备使用体验。

    android得到电池的各种状态(电量、图标,温度、类型等)

    总之,了解并掌握Android中获取电池状态的方法,可以帮助开发者更好地监控设备的电池状况,从而优化应用性能,提供更好的用户体验。同时,实时更新电池状态也是提高用户交互性和应用吸引力的有效手段。通过实践和...

    Android动态绘制电池电量.rar

    总结来说,这个“Android动态绘制电池电量”的示例项目展示了如何利用Android的BatteryManager获取电池状态,通过BroadcastReceiver监听电池变化,然后使用自定义View结合Path和Canvas绘制动态曲线,最终实现电量的...

    android获取手机电量

    在Android开发过程中,获取设备电量是常见的需求之一,尤其是在开发与电池管理相关的应用时尤为重要。下面将详细讲解如何在Android应用程序中实现这一功能。 #### 一、理解BroadcastReceiver 在Android中,系统...

    安卓Android源码——broadcast电池电量显示源码.zip

    在安卓(Android)系统中,Broadcast(广播接收者)是一种重要的组件,用于在应用程序之间传递消息,...总之,通过这个源码学习,可以加深对Android中BroadcastReceiver机制的理解,并掌握如何获取和显示电池电量信息。

    Android broadcast电池电量显示源码.zip

    在这个"Android broadcast电池电量显示源码.zip"压缩包中,我们很显然会看到一个示例,它是如何利用BroadcastReceiver来监听并显示设备电池电量的。下面将详细解释相关知识点。 1. **BroadcastReceiver**: ...

    Android电池电量监控Widget

    "Android电池电量监控Widget"就是这样的一个工具,它专为用户提供方便快捷的电池状态查询服务。这款Widget设计小巧,用户只需轻轻一点桌面上的小Android机器人图标,就能获取到关于电池的各种关键信息。 首先,我们...

    Android代码-broadcast电池电量显示源码.zip

    本资源“Android代码-broadcast电池电量显示源码.zip”提供了一个示例,展示了如何通过BroadcastReceiver监听电池电量的变化并在界面上显示。下面我们将详细探讨相关的Android知识点。 1. **BroadcastReceiver**: ...

    Android获取手机电池电量用法实例

    3. ACTION_BATTERY_OKAY:当电池电量从低电状态恢复到正常水平时,系统会发送此Action的广播。这在需要监控电池状态的应用中很有用。 以下是一个简单的示例,展示了如何创建一个BroadcastReceiver来监听电池电量的...

    Android环境下获取电池的电量

    在Android系统中,获取电池电量是一项常见的需求,用于监控设备的电力状态,为用户提供电量相关的应用功能。在本文中,我们将深入探讨如何在Android环境下利用ACTION_BATTERY_CHANGED广播接收器来实现这一目标。 ...

    Android broadcast电池电量显示源码.rar

    总结来说,这个项目提供了一个实现Android电池电量显示的实例,通过BroadcastReceiver监听电池状态变化,并在界面上实时更新电量信息。对于学习Android系统广播机制以及电池管理的开发者来说,这是一个非常实用的...

Global site tag (gtag.js) - Google Analytics