获取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---");
            }
        }

    }


}




  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值