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

Cách đăng ký BroadcastReceiver bằng code trong Android

Giới thiệu

Ví dụ này minh họa cách đăng ký một BroadcastReceiver theo cách lập trình (programmatically) trong Android thay vì khai báo trong file Manifest.

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

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

Mở Android Studio, chọn File → New Project và điền các thông tin cần thiết để tạo dự án mới.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"
        android:layout_centerInParent="true"/>

</RelativeLayout>

Bước 3: Viết code MainActivity.java

import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    ExampleBroadcastReceiver exampleBroadcastReceiver = new ExampleBroadcastReceiver();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(exampleBroadcastReceiver, filter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(exampleBroadcastReceiver);
    }
}

Lưu ý quan trọng: Luôn đăng ký receiver trong onStart() và hủy đăng ký trong onStop() để tránh rò rỉ bộ nhớ và crash khi Activity bị hủy.

Bước 4: Tạo lớp BroadcastReceiver (ExampleBroadcastReceiver.java)

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.widget.Toast;

class ExampleBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            boolean noConnectivity = intent.getBooleanExtra(
                ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
            
            if (noConnectivity) {
                Toast.makeText(context, "Mất kết nối", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "Đã kết nối", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

Bước 5: Cấu hình AndroidManifest.xml

<?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>

Lưu ý: Với cách đăng ký bằng code, bạn không cần khai báo <receiver> trong Manifest.

Chạy ứng dụng

Kết nối thiết bị Android thật với máy tính, nhấn Run trong Android Studio và quan sát thông báo Toast khi bật/tắt mạng.

Cách đăng ký BroadcastReceiver bằng code trong Android

Cách đăng ký BroadcastReceiver bằng code trong Android