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

Cách phát hiện sạc thiết bị Android (BroadcastReceiver)

Giới thiệu

Sử dụng BroadcastReceiver lắng nghe intent Intent.ACTION_POWER_CONNECTED để biết khi nào người dùng cắm sạc.

Các bước thực hiện

Bước 1: Tạo project

Bước 2: Giao diện (activity_main.xml)

<TextView
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textSize="24sp"
    android:text="Chờ cắm sạc..." />

Bước 3: Code (MainActivity.java)

package com.example.myapplication;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private PowerReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.text);
        receiver = new PowerReceiver();
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Đăng ký receiver khi activity hiện diện
        registerReceiver(receiver, new IntentFilter(Intent.ACTION_POWER_CONNECTED));
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Hủy đăng ký để tránh rò rỉ bộ nhớ
        unregisterReceiver(receiver);
    }

    private class PowerReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (Intent.ACTION_POWER_CONNECTED.equals(intent.getAction())) {
                textView.setText("⚡ Đã cắm sạc!");
            }
        }
    }
}

Mở rộng

  • Thêm lắng nghe ACTION_POWER_DISCONNECTED để biết khi rút sạc.
  • Dùng BatteryManager để lấy mức pin, trạng thái sạc nhanh, nhiệt độ...
  • Để chạy nền, khai báo receiver trong Manifest (nhưng cần xử lý Doze mode).

Lưu ý

Từ Android 8.0 (API 26), các implicit broadcast bị hạn chế. Nên dùng JobScheduler hoặc WorkManager cho tác vụ nền định kỳ.