電池電量資訊顯示
阿新 • • 發佈:2019-01-27
佈局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:layout_marginTop="40dp" android:orientation="vertical"> <TextView android:id="@+id/batterytv" android:gravity="center" android:text="35%" android:textColor="#000000" android:textSize="16sp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
然後新建ElectricityBR 工具類, 使該類繼承BroadcastReceiver(廣播接收器) 用於接收電池資訊, BroadcastReceiver 是Android 四大元件之一, 這種控制元件的本質是一種全域性監聽器, 用於監聽系統全域性的廣播訊息。 它可以接受來自系統和應用的廣播, 並使用AlertDialog 顯示電池資訊:
public class ElBR extends BroadcastReceiver { Dialog dialog; @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())){ int level = intent.getIntExtra("level", 0); int scale = intent.getIntExtra("scale", 0); int voltage = intent.getIntExtra("voltage", 0); int temperature = intent.getIntExtra("temperature", 0); if (dialog == null){ dialog = new AlertDialog.Builder(context) .setTitle("電池資訊") .setMessage( "電池電量為:" + String.valueOf(level * 100 /scale) + "%\n" + "電池電壓為: " + String.valueOf((float) voltage / 1000) + "v" + "\n" + "電池溫度為: " + String.valueOf((float) temperature / 10) + "℃" )//設定訊息內容 .setNegativeButton("關閉", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //設定按鈕 } }).create(); dialog.show(); //顯示電池資訊 } } } }
在主活動介面實現點選顯示電池資訊:
private TextView textView;
private int[] batterystatus = new int[]{R.drawable.battery1, R.drawable.battery2, R.drawable.battery3 }; //不同電量顯示圖片陣列
private int[] batterypersent = new int[]{75, 30, 0}; //電量多少開始切換圖片陣列
相關變數已經宣告, 接下來需要對控制元件進行初始化:
textView = (TextView) findViewById(R.id.batterytv); textView.setOnClickListener(this);
建立電池資訊廣播接受者, 實時顯示電池電量資訊, 然後在onBatteryPhoto() 方法中根據電量的不同顯示不同的TextView背景圖片。
/**
* 建立廣播接受電池電量資訊
*/
private BroadcastReceiver mBatteryBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
int intLevel = intent.getIntExtra("level", 0);
int intScale = intent.getIntExtra("scale", 0);
onBatteryPhoto(intLevel, intScale);
}
}
};
/**
* 設定電量百分比, 切換不同電量圖片
*/
private void onBatteryPhoto(int intLevel, int intScale) {
int bp = intLevel * 100 / intScale;
textView.setText(bp + "%");
if (bp >= batterypersent[2]){
textView.setBackgroundResource(batterystatus[2]);
}
if (bp >= batterypersent[1]){
textView.setBackgroundResource(batterystatus[1]);
}
if (bp >= batterypersent[0]){
textView.setBackgroundResource(batterystatus[0]);
}
}
實現電池圖示單擊功能:
在主活動中使用自定義ElBR() 廣播接收器, 實時接收電池資訊並在Dialog 中顯示:
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.batterytv:
ElBR receiver = new ElBR(); //接受電量資訊
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); //宣告電量資訊接受者
MainActivity.this.registerReceiver(receiver, intentFilter); //註冊廣播
break;
}
}
效果圖: