Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Lấy mức pin và trạng thái sạc (sạc, đang xả, đầy) trên Android

Giới thiệu

Ví dụ này minh họa cách lấy mức pin (phần trăm) và trạng thái pin (đang sạc, đầy, đang xả) bằng BroadcastReceiver lắng nghe Intent.ACTION_BATTERY_CHANGED.

Bước 1: Tạo dự án mới

Tạo project Android Studio: File → New Project.

Bước 2: Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16sp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:textSize="24sp"
        android:textStyle="bold" />

</LinearLayout>

Bước 3: MainActivity - BroadcastReceiver cho pin

Đăng ký receiver động trong onCreate (không cần khai báo trong manifest vì ACTION_BATTERY_CHANGED chỉ gửi sticky broadcast).

import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView textView;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = getApplicationContext();
        textView = findViewById(R.id.textView);
        this.registerReceiver(this.broadcastReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            textView.setText("Mức pin: " + level + "%");

            int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL;

            if (isCharging) {
                Toast.makeText(getApplicationContext(), "Sạc đang kết nối, pin đang 충 điện...", Toast.LENGTH_SHORT).show();
            } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {
                Toast.makeText(getApplicationContext(), "Sạc đã ngắt kết nối", Toast.LENGTH_SHORT).show();
            }
        }
    };
}

Bước 4: Manifest

Không cần quyền đặc biệt cho ACTION_BATTERY_CHANGED.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Chạy app, TextView hiển thị % pin. Cắm/sổ sạc sẽ hiện Toast tương ứng.

Mở rộng: Lấy thêm thông tin pin

Có thể lấy thêm: EXTRA_TEMPERATURE, EXTRA_VOLTAGE, EXTRA_HEALTH, EXTRA_TECHNOLOGY, EXTRA_PLUGGED (loại sạc: AC, USB, Wireless).