Android电池电量监听的示例代码

2020-10-22 09:58:45 浏览数 (1)

监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播。

1.运行状态如下图:

1.充电中的状态

2.未充电时的状态

2.实现代码如下,各个状态通过名字就很容易知道意思,BatteryManager类中定义了电池状态。

代码语言:javascript复制
public class MainActivity extends Activity { 
private static final String TAG = "MainActivity"; 
private TextView mTvVoltage; 
private TextView mTvTemperature; 
private TextView mTvLevel; 
private TextView mTvStatus; 
private TextView mTvHealth; 
private TextView mTvTechnology; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
mTvVoltage = (TextView)findViewById(R.id.tv_voltage); 
mTvTemperature = (TextView)findViewById(R.id.tv_temperature); 
mTvLevel = (TextView)findViewById(R.id.tv_level); 
mTvStatus = (TextView)findViewById(R.id.tv_status); 
mTvHealth = (TextView)findViewById(R.id.tv_health); 
mTvTechnology = (TextView)findViewById(R.id.tv_technology); 
this.registerReceiver(this.mBatteryReceiver, new IntentFilter(  
Intent.ACTION_BATTERY_CHANGED)); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.main, menu); 
return true; 
} 
private BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() {  
@Override 
public void onReceive(Context arg0, Intent arg1) {  
int voltage=arg1.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0); 
mTvVoltage.setText("电压:"   voltage / 1000   "."   voltage % 1000   "V"); 
int temperature=arg1.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0); 
mTvTemperature.setText("温度:"   temperature / 10   "."   temperature % 10   "℃"); 
if (temperature  = 300) { 
mTvTemperature.setTextColor(Color.RED); 
} else { 
mTvTemperature.setTextColor(Color.BLUE); 
} 
int level=arg1.getIntExtra(BatteryManager.EXTRA_LEVEL,0); 
int scale=arg1.getIntExtra(BatteryManager.EXTRA_SCALE,0); 
int levelPercent = (int)(((float)level / scale) * 100); 
mTvLevel.setText("电量:"   levelPercent   "%"); 
if (level <= 10) { 
mTvLevel.setTextColor(Color.RED); 
} else { 
mTvLevel.setTextColor(Color.BLUE); 
} 
int status = arg1.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN); 
String strStatus = "未知状态";; 
switch (status) { 
case BatteryManager.BATTERY_STATUS_CHARGING: 
strStatus = "充电中……"; 
break; 
case BatteryManager.BATTERY_STATUS_DISCHARGING: 
strStatus = "放电中……"; 
break; 
case BatteryManager.BATTERY_STATUS_NOT_CHARGING: 
strStatus = "未充电"; 
break; 
case BatteryManager.BATTERY_STATUS_FULL: 
strStatus = "充电完成"; 
break; 
} 
mTvStatus.setText("状态:"   strStatus); 
int health = arg1.getIntExtra(BatteryManager.EXTRA_HEALTH, BatteryManager.BATTERY_HEALTH_UNKNOWN); 
String strHealth = "未知 :(";; 
switch (status) { 
case BatteryManager.BATTERY_HEALTH_GOOD: 
strHealth = "好 :)"; 
break; 
case BatteryManager.BATTERY_HEALTH_OVERHEAT: 
strHealth = "过热!"; 
break; 
case BatteryManager.BATTERY_HEALTH_DEAD: // 未充电时就会显示此状态,这是什么鬼? 
strHealth = "良好"; 
break; 
case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE: 
strHealth = "电压过高!"; 
break; 
case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE: 
strHealth = "未知 :("; 
break; 
case BatteryManager.BATTERY_HEALTH_COLD: 
strHealth = "过冷!"; 
break; 
} 
mTvHealth.setText("健康状况:"   strHealth); 
String technology = arg1.getStringExtra(BatteryManager.EXTRA_TECHNOLOGY); 
mTvTechnology.setText("电池技术:"   technology); 
} 
}; 
}

3.Layout布局如下,很简单只有几个TextView:

代码语言:javascript复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity"   
<TextView android:id="@ id/tv_battery_status" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textColor="#0000FF" 
android:textStyle="bold" 
android:text="@string/battery_status" /  
<LinearLayout android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:layout_below="@id/tv_battery_status"   
<TextView android:id="@ id/tv_voltage" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /  
<TextView android:id="@ id/tv_temperature" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /  
<TextView android:id="@ id/tv_level" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /  
<TextView android:id="@ id/tv_status"
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /  
<TextView android:id="@ id/tv_health"
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /  
<TextView android:id="@ id/tv_technology" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /  
</LinearLayout  
</RelativeLayout 

以上就是本文的全部内容,希望对大家的学习有所帮助。

0 人点赞