Lập trình Android, Series lập trình Android cơ bản

Bài 6: Broadcast Receiver trong Android (Lập trình Android cơ bản)

Lập trình android cơ bản

Broadcast Receivers phản hồi các tin nhắn từ những ứng dụng khác hoặc từ chính hệ thống. Những tin nhắn đôi khi được gọi là các event hoặc intent. Ví dụ, ứng dụng cũng thể phát ra các tin nhắn cho các ứng dụng khác biết rằng một số dữ liệu đã được tải về thiết bị và có sẵn để chúng sử dụng, vì vậy broadcast receiver sẽ bắt những giao tiếp đó và tạo ra những hành động thích hợp.

Dưới đây là 2 bước quan trọng để tạo ra một Broadcast Receiver làm việc cho các intent được phát sóng bởi hệ thống:

1. Tạo Broadcast receiver.

2. Khai báo Broadcast receiver.

Có một bước bổ sung trong trường hợp bạn triển khai những intent tuỳ chỉnh của bản thân thì bạn phải tạo sau đó phát sóng những intent đó.

Tạo một Broadcast Receiver

Một Broadcast Receiver được triển khai như một lớp con của lớp BroadcastReceveroverriding phương thức onReceive() nơi mà mỗi tin nhắn sẽ được nhận như là một tham số đối tượng Intent. Dưới đây chúng ta sẽ tạo một Broadcast Receiver có tên là MyReceiver được extends từ lớp BroadcastReceiver:

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

Đăng ký Broadcast Receiver

Một ứng dụng lắng nghe để nhận những tin nhắn phát sóng cụ thể bằng cách khai báo một broadcast receiver trong AndroidManifest.xml. Dưới đây chúng ta sẽ khai báo MyReceiver để lắng nghe một sự kiện được hệ thống tạo ra là ACTION_BOOT_COMPLETED, sự kiện này được phát ra một khi hệ thống Android hoàn tất quá trình khởi động.

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <receiver android:name="MyReceiver">
   
      <intent-filter>
         <action android:name="android.intent.action.BOOT_COMPLETED">
         </action>
      </intent-filter>
   
   </receiver>
</application>

Bây giờ, mỗi khi thiết bị Android của bạn được khởi động, nó sẽ bắt được tin nhắn từ hệ thống bởi Broadcast Receiver mà chúng ta đã triển khai ở trên là MyReceiver và những code chúng ta thêm vào bên trong onReceiver() sẽ được thực thi.

Một số sự kiện tạo ra bởi hệ thống được định nghĩ như các trường static final trong lớp Intent được liệt kê trong bảng dưới đây:

Sự kiện và mô tả
1android.intent.action.BATTERY_CHANGED
Sự kiện chứa trang thái sạc, mức độ và các thông tin về pin.
2android.intent.action.BATTERY_LOW
Cho biết tình trạng pin yếu của thiết bị.
3android.intent.action.BATTERY_OKAY
Cho biết pin có mức năng lượng ổ định sau khi BATTERY_LOW.
4android.intent.action.BOOT_COMPLETED
Sự kiện này chỉ phát sóng một lần sau khi hệ thống hoàn thành quá trình khởi động.
5android.intent.action.BUG_REPORT
Hiển thị activity để báo cáo một lỗi.
6android.intent.action.CALL
Khi có cuộc gọi đến.
7android.intent.action.CALL_BUTTON
Khi người dùng bấm nút gọi để thực hiện một cuộc gọi
8android.intent.action.DATE_CHANGED
Khi ngày tháng được thay đổi
9android.intent.action.REBOOT
Khi thiết bị khởi động lại.

Phát sóng những intent tuỳ chỉnh

Nếu bạn muốn ứng dụng của mình tạo vào gửi những tin nhắn như là intent tuỳ chỉnh thì bạn sẽ phải tạo và gủi những intent đó bằng cách sử dụng phương thức sendBroadcast() bên trong lớp activity đã tạo. Nếu bạn sử dụng phương thức sendStickyBroadcast(Intent), Intent là sticky, có nghĩa là Intent bạn đang gửi ở lại sau khi chương trình phát sóng hoàn tất.

public void broadcastIntent(View view) {
   Intent intent = new Intent();
   intent.setAction("com.tutorialspoint.CUSTOM_INTENT");
   sendBroadcast(intent);
}

Intent com.techchicken.CUSTOM_INTENT cũng có thể được khai báo tương tư như cách chúng ta đã khai báo những intent được tạo bởi hệ thống.

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/AppTheme" >
   <receiver android:name="MyReceiver">
   
      <intent-filter>
         <action android:name="com.techchicken.CUSTOM_INTENT">
         </action>
      </intent-filter>
   
   </receiver>
</application>
Được gắn thẻ ,

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *