获取Android设备电池电量状态

来源:互联网 发布:人工智能的利弊英文 编辑:程序博客网 时间:2024/06/01 23:27



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中的注册。

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

本人微博:honey_11
Demo下载
最后,以上例子都来源与安卓学习手册,例子源码,源码例子文档一网打尽。



0 0