获取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
- 获取Android设备电池电量状态
- 获取Android设备电池电量状态
- 获取Android设备电池电量状态
- 获取Android设备电池电量状态
- 获取Android设备电池电量状态
- 获取Android设备电池电量状态
- Android 获取设备电池电量
- 获取设备电池电量及状态
- android 获取充电状态 电池电量
- native层获取Android设备电池电量
- Android电池电量状态源码
- Android中获取电池电量
- Android中获取电池电量
- Android中获取电池电量
- Android中获取电池电量
- Android 获取电池电量
- Android 获取 Wifi 信号强度,检测是 Wifi 或者流量,获取手机电池电量及充电状态
- iOS开发-runtime获取设备电池电量
- SPI协议详解
- 支付网关潜藏黑客!32万多含CVV码的财务信息被盗
- 死神
- Android Fragment中嵌套Fragment不显示
- Global shutter(全局快门)与Rolling shutter(卷帘快门)的区别与比较
- 获取Android设备电池电量状态
- 怎样用XMind快速制作思维导图
- android 空中OTA升级
- CAN总线协议详解
- Spinner 设置适配器, adapter
- Longest Common Prefix
- LeetCode 167.Two Sum II 解题报告
- UART协议详解
- 在Winform中菜单动态添加“最近使用文件”