1. 程式人生 > >電池電量資訊顯示

電池電量資訊顯示

佈局:

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

效果圖: