Broadcast Receiver trong Android nhằm để lắng nghe những sự kiện, trạng thái thay đổi của hệ thống chẳng hạn như có tin nhắn được gởi đến, có cuộc gọi đến, trạng thái của pin, trạng thái kết nối mạng…
Khi bạn cần xử lý những công việc mà phải phụ thuộc vào hệ thống chẳng hạn như tự động trả lời tin nhắn hoặc cuộc gọi, theo dõi tình trạng pin của thiết bị… thì nên sử dụng Broadcast Receiver.
1. Tìm hiểu về Broadcast Receiver trong Android
Dưới đây sẽ liệt kê danh sách những sự kiện hệ thống:
android.app.action.ACTION_PASSWORD_CHANGED android.app.action.ACTION_PASSWORD_EXPIRING android.app.action.ACTION_PASSWORD_FAILED android.app.action.ACTION_PASSWORD_SUCCEEDED android.app.action.DEVICE_ADMIN_DISABLED android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED android.app.action.DEVICE_ADMIN_ENABLED android.app.action.DEVICE_OWNER_CHANGED android.app.action.INTERRUPTION_FILTER_CHANGED android.app.action.LOCK_TASK_ENTERING android.app.action.LOCK_TASK_EXITING android.app.action.NEXT_ALARM_CLOCK_CHANGED android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED android.app.action.NOTIFICATION_POLICY_CHANGED android.app.action.PROFILE_PROVISIONING_COMPLETE android.app.action.SYSTEM_UPDATE_POLICY_CHANGED android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED android.bluetooth.adapter.action.DISCOVERY_FINISHED android.bluetooth.adapter.action.DISCOVERY_STARTED android.bluetooth.adapter.action.LOCAL_NAME_CHANGED android.bluetooth.adapter.action.SCAN_MODE_CHANGED android.bluetooth.adapter.action.STATE_CHANGED android.bluetooth.device.action.ACL_CONNECTED android.bluetooth.device.action.ACL_DISCONNECTED android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED android.bluetooth.device.action.BOND_STATE_CHANGED android.bluetooth.device.action.CLASS_CHANGED android.bluetooth.device.action.FOUND android.bluetooth.device.action.NAME_CHANGED android.bluetooth.device.action.PAIRING_REQUEST android.bluetooth.device.action.UUID android.bluetooth.devicepicker.action.DEVICE_SELECTED android.bluetooth.devicepicker.action.LAUNCH android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED android.hardware.action.NEW_PICTURE android.hardware.action.NEW_VIDEO android.hardware.hdmi.action.OSD_MESSAGE android.hardware.input.action.QUERY_KEYBOARD_LAYOUTS android.intent.action.ACTION_POWER_CONNECTED android.intent.action.ACTION_POWER_DISCONNECTED android.intent.action.ACTION_SHUTDOWN android.intent.action.AIRPLANE_MODE android.intent.action.APPLICATION_RESTRICTIONS_CHANGED android.intent.action.BADGE_COUNT_UPDATE android.intent.action.BATTERY_CHANGED android.intent.action.BATTERY_LOW android.intent.action.BATTERY_OKAY android.intent.action.BOOT_COMPLETED android.intent.action.CAMERA_BUTTON android.intent.action.CONFIGURATION_CHANGED android.intent.action.CONTENT_CHANGED android.intent.action.DATA_SMS_RECEIVED android.intent.action.DATE_CHANGED android.intent.action.DEVICE_STORAGE_LOW android.intent.action.DEVICE_STORAGE_OK android.intent.action.DOCK_EVENT android.intent.action.DOWNLOAD_COMPLETE android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED android.intent.action.DREAMING_STARTED android.intent.action.DREAMING_STOPPED android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE android.intent.action.FETCH_VOICEMAIL android.intent.action.GTALK_CONNECTED android.intent.action.GTALK_DISCONNECTED android.intent.action.HEADSET_PLUG android.intent.action.HEADSET_PLUG android.intent.action.INPUT_METHOD_CHANGED android.intent.action.LOCALE_CHANGED android.intent.action.LOCKED_BOOT_COMPLETED android.intent.action.MANAGE_PACKAGE_STORAGE android.intent.action.MEDIA_BAD_REMOVAL android.intent.action.MEDIA_BUTTON android.intent.action.MEDIA_CHECKING android.intent.action.MEDIA_EJECT android.intent.action.MEDIA_MOUNTED android.intent.action.MEDIA_NOFS android.intent.action.MEDIA_REMOVED android.intent.action.MEDIA_SCANNER_FINISHED android.intent.action.MEDIA_SCANNER_SCAN_FILE android.intent.action.MEDIA_SCANNER_STARTED android.intent.action.MEDIA_SHARED android.intent.action.MEDIA_UNMOUNTABLE android.intent.action.MEDIA_UNMOUNTED android.intent.action.MY_PACKAGE_REPLACED android.intent.action.NEW_OUTGOING_CALL android.intent.action.NEW_VOICEMAIL android.intent.action.PACKAGES_SUSPENDED android.intent.action.PACKAGES_UNSUSPENDED android.intent.action.PACKAGE_ADDED android.intent.action.PACKAGE_CHANGED android.intent.action.PACKAGE_DATA_CLEARED android.intent.action.PACKAGE_FIRST_LAUNCH android.intent.action.PACKAGE_FULLY_REMOVED android.intent.action.PACKAGE_INSTALL android.intent.action.PACKAGE_NEEDS_VERIFICATION android.intent.action.PACKAGE_REMOVED android.intent.action.PACKAGE_REPLACED android.intent.action.PACKAGE_RESTARTED android.intent.action.PACKAGE_VERIFIED android.intent.action.PHONE_STATE android.intent.action.PROVIDER_CHANGED android.intent.action.PROXY_CHANGE android.intent.action.REBOOT android.intent.action.SCREEN_OFF android.intent.action.SCREEN_ON android.intent.action.SYNC_VOICEMAIL android.intent.action.TIMEZONE_CHANGED android.intent.action.TIME_SET android.intent.action.TIME_TICK android.intent.action.UID_REMOVED android.intent.action.USER_PRESENT android.intent.action.USER_UNLOCKED android.intent.action.WALLPAPER_CHANGED android.media.ACTION_SCO_AUDIO_STATE_UPDATED android.media.AUDIO_BECOMING_NOISY android.media.RINGER_MODE_CHANGED android.media.SCO_AUDIO_STATE_CHANGED android.media.VIBRATE_SETTING_CHANGED android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION android.media.action.HDMI_AUDIO_PLUG android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION android.net.conn.BACKGROUND_DATA_SETTING_CHANGED android.net.conn.CONNECTIVITY_CHANGE android.net.conn.RESTRICT_BACKGROUND_CHANGED android.net.nsd.STATE_CHANGED android.net.scoring.SCORER_CHANGED android.net.scoring.SCORE_NETWORKS android.net.wifi.NETWORK_IDS_CHANGED android.net.wifi.RSSI_CHANGED android.net.wifi.SCAN_RESULTS android.net.wifi.STATE_CHANGE android.net.wifi.WIFI_STATE_CHANGED android.net.wifi.p2p.CONNECTION_STATE_CHANGE android.net.wifi.p2p.DISCOVERY_STATE_CHANGE android.net.wifi.p2p.PEERS_CHANGED android.net.wifi.p2p.STATE_CHANGED android.net.wifi.p2p.THIS_DEVICE_CHANGED android.net.wifi.supplicant.CONNECTION_CHANGE android.net.wifi.supplicant.STATE_CHANGE android.nfc.action.ADAPTER_STATE_CHANGED android.os.action.DEVICE_IDLE_MODE_CHANGED android.os.action.POWER_SAVE_MODE_CHANGED android.provider.Telephony.SIM_FULL android.provider.Telephony.SMS_CB_RECEIVED android.provider.Telephony.SMS_DELIVER android.provider.Telephony.SMS_RECEIVED android.provider.Telephony.SMS_REJECTED android.provider.Telephony.SMS_SERVICE_CATEGORY_PROGRAM_DATA_RECEIVED android.provider.Telephony.WAP_PUSH_DELIVER android.provider.Telephony.WAP_PUSH_RECEIVED android.provider.action.DEFAULT_SMS_PACKAGE_CHANGED android.provider.action.EXTERNAL_PROVIDER_CHANGE android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED android.speech.tts.engine.TTS_DATA_INSTALLED
2. Khởi tạo Broadcast Receiver trong Android
Để đăng ký một sự kiện lắng nghe với Broadcast Receiver thì có 2 cách là:
- Đăng ký trong AndroidManifest.xml
- Đăng ký bằng đoạn mã Java
Khởi tạo Broadcast Receiver đầu tiên cần khai báo Broadcast Receiver trong tập tin AndroidManifest.xml như sau:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.teamvietdev.androidbasicbroadcastreceiver"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" 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> <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> </application> </manifest>
Sau đó tạo lớp kế thừa từ lớp BroadcastReceiver để lắng nghe sau đó xử lý các sự kiện:
package com.teamvietdev.androidbasicbroadcastreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); if (isConnected) { try { Toast.makeText(context, "Network is connected", Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); } } else { Toast.makeText(context, "Network is changed or reconnected", Toast.LENGTH_LONG).show(); } } }
Lời kết: Cám ơn bạn đã theo dõi bài viết tìm hiểu về Broadcast Receiver trong Android, ngoài ra các bạn có thể xem thêm các nội dung khác trong chuyên mục lập trình Android được chia sẻ với Team Việt Dev.
(Tác giả: Team Việt Dev)