CĂN BẢN
INTENTS
GIAO DIỆN
CÁC KHÁI NIỆM
VÍ DỤ
TÀI LIỆU
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Broadcast Receiver trong Android

Trong Android, Broadcast Receiver là một component cho phép hệ thống hoặc các ứng dụng khác phân phối các sự kiện đến ứng dụng như: Gửi tin nhắn pin yếu hoặc màn hình tắt tin nhắn đến ứng dụng. Các ứng dụng cũng có thể bắt đầu khởi tạo tín hiệu broadcast để cho các ứng dụng khác biết rằng dữ liệu cần thiết có sẵn trong thiết bị để sử dụng nó.

Nói chung, chúng ta sử dụng Intent gửi các sự kiện broadcast cho các ứng dụng khác và Broadcast Receivers sử dụng thông báo trên thanh trạng thái để cho phép người dùng biết rằng sự kiện xảy ra.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong Android, Broadcast Receiver được kế thừa như một lớp con của BroadcastReceiver và mỗi tín hiệu (broadcast) được truyền dưới dạng đối tượng Intent .

Chúng ta có thể đăng ký ứng dụng chỉ để nhận được một vài tin nhắn broadcast. Khi một broadcast được nhận, hệ thống sẽ kiểm tra broadcast được chỉ định đã đăng ký hay chưa dựa trên việc nó sẽ định tuyến các broadcast đến các ứng dụng.

I. Nhận Broadcast

Trong Android có thể nhận được các broadcast bằng việc đăng ký theo hai cách.

Cách thứ nhất là broadcast bằng file manifest Android ( AndroidManifest.xml ). Chúng ta cần dùng phần tử <receive> trong file như dưới đây.

<receiver android:name=".SampleBroadcastReceiver">

    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

Code trên sẽ kích hoạt sự kiện hệ thống broadcast trong code bất cứ khi nào quá trình khởi động hoàn thành.

Một cách khác là đăng ký một phương thức nhận tự động thông qua phương thức Context.registerReceiver () . Để đăng ký phương thức broadcast receiver, chúng ta cần kế thừa lớp bằng BroadcastReceiver và cần triển khai phương thức onReceive(Context, Intent) ​như được hiển thị bên dưới.

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

Giả sử nếu chúng ta đăng ký sự kiện ACTION_BOOT_COMPLETED , bất cứ khi nào quá trình khởi động được hoàn thành, phương thức onReceive() sẽ được gọi.

II. Gửi Broadcast

Trong Android có thể gửi một broadcast trong ứng dụng bằng ba cách khác nhau

Phương thức Mô tả
sendOrderedBroadcast(Intent, String) Được sử dụng để gửi broadcast đến một nơi nhận tại một thời điểm.
sendBroadcast(Intent) Được sử dụng để gửi broadcast đến tất cả các nơi nhận theo thứ tự không xác định.
LoadBroadcastManager.sendBroadcast Được sử dụng để gửi broadcast đến các nơi nhận trong cùng ứng dụng với nơi gửi

III. Tùy chỉnh Broadcast theo Intent

Trong Android, chúng ta có thể tạo các broadcast tùy chỉnh bằng cách sử dụng intent. Sau đây là đoạn code đơn giản để gửi broadcast bằng cách tạo một Intent bằng phương thức sendBroadcast(Intent)

Intent sintent = new Intent();
intent.setAction("com.tutlane.broadcast.MY_NOTIFICATION");
intent.putExtra("data","Welcome to Tutlane");
sendBroadcast(intent);

Với đoạn code trên, chúng ta tạo một Intent tùy chỉnh "sintent". Chúng ta cần đăng ký intent này trong file Androidmanifest như dưới đây

<receiver android:name=".SampleBroadcastReceiver">

    <intent-filter>
        <action android:name=" com.tutlane.broadcast.MY_NOTIFICATION"/>
    </intent-filter>
</receiver>

Đây là cách tạo ra broadcast tùy chỉnh trong ứng dụng bằng cách sử dụng Intent.

IV. Hệ thống Broadcasts

Trong Android, một số sự kiện hệ thống được định nghĩa là các trường final static trong lớp Intent. Sau đây là một số sự kiện có sẵn trong các ứng dụng Android.

Sự kiện Mô tả
android.intent.action.BOOT_COMPLETED Đưa ra một sự kiện khi việc khởi động hoàn thành.
android.intent.action.POWER_CONNECTED Được sử dụng để kích hoạt một sự kiện khi nguồn điện được kết nối với thiết bị.
android.intent.action.POWER_DISCONNECTED Được sử dụng để kích hoạt một sự kiện khi nguồn bị ngắt khỏi thiết bị.
android.intent.action.BATTERY_LOW Được sử dụng để gọi một sự kiện khi thiết bị pin yếu.
android.intent.action.BATTERY_OKAY Được sử dụng để gọi một sự kiện khi pin lại OKAY.
android.intent.action.REBOOT Gọi một sự kiện khi thiết bị khởi động lại một lần nữa.

Tương tự, có nhiều sự kiện hệ thống có sẵn trong ứng dụng Android.

V. Ví dụ về BroadcastReceiver trong Android

Để thiết lập BroadcastReceiver trong ứng dụng Android, chúng ta cần thực hiện các thao tác sau.

  • Tạo BroadcastReceiver
  • Đăng ký BroadcastReceiver

Tạo một ứng dụng Android mới bằng android studio và đặt tên là BroadcastReceiver .

Bây giờ chúng ta cần tạo file nội dung broadcast tên là MyBroadcastReceiver.java trong đường dẫn \ src \ main \ java \ com.tutlane.broadcastreceiver để xác định provider thực tế và các phương thức liên quan bằng cách nhấp chuột phải vào folder ứng dụng của bạn -> New -> chọn Java Class và đặt tên là MyBroadcastReceiver.java.

Khi tạo file MyBroadcastReceiver.java xong, nhập mã như dưới đây

MyBroadcastReceiver.java

package com.tutlane.broadcastreceiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * Created by Tutlane on 01-08-2017.
 */

public class MyBroadcastReceiver extends BroadcastReceiver {
   @Override
    public void onReceive(Context context, Intent intent){
       CharSequence iData = intent.getCharSequenceExtra("msg");
       Toast.makeText(context,"Tutlane Received Message: "+iData,Toast.LENGTH_LONG).show();
   }
}

Bây giờ mở file Activity_main.xml từ đường dẫn \ src \ main \ res \ layout và viết đoạn mã sau.

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/txtMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="180dp"
        android:ems="10"/>
    <Button
        android:id="@+id/btnShow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickShowBroadcast"
        android:layout_marginLeft="130dp"
        android:text="Show Broadcast"/>
</LinearLayout>

Bây giờ mở file MainActivity.java từ đường dẫn \ java \ com.tutlane.broadcastreceiver và viết mã để tùy chỉnh broadcast bằng intent.

MainActivity.java

package com.tutlane.broadcastreceiver;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void onClickShowBroadcast(View view){
        EditText st = (EditText)findViewById(R.id.txtMsg);
        Intent intent = new Intent();
        intent.putExtra("msg",(CharSequence)st.getText().toString());
        intent.setAction("com.tutlane.CUSTOM_INTENT");
        sendBroadcast(intent);
    }
}

Bây giờ chúng ta cần đăng ký broadcast receiver trong file manifest Android ( AndroidManifest.xml ) bằng cách sử dụng thuộc tính <receive> như hiển thị bên dưới.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tutlane.broadcastreceiver">

    <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>
        <receiver android:name="MyBroadcastReceiver">
            <intent-filter>
                <action android:name="com.tutlane.CUSTOM_INTENT">
                </action>
            </intent-filter>
        </receiver>
    </application>
</manifest>

IV. Kết quả của ví dụ về BroadcastReceiver

Khi chạy ví dụ trên trong trình giả lập Android thì sẽ nhận được kết quả như hiển thị bên dưới

android broadcastreceiver example output gif


Đây là cách sử dụng broadcast receiver trong các ứng dụng Android để gửi tin nhắn broadcast đến các ứng dụng.

Cùng chuyên mục:

FrameLayout trong Android

FrameLayout trong Android

Trong các UI Layout, FrameLayout là loại Layout đơn giản nhất, xem ngay tại đây

TableLayout trong Android

TableLayout trong Android

Trong bài này chúng ta sẽ tìm hiểu TalbeLayout trong Android

Relative Layout trong Android

Relative Layout trong Android

Trong bài này chúng ta sẽ tìm hiểu RelativeLayout trong Android

LinearLayout trong Android

LinearLayout trong Android

Ở bài trước chúng ta đã tìm hiểu sơ qua về các loại layout trong…

UI Layout trong Android

UI Layout trong Android

Trong bài này chúng ta sẽ tìm hiểu về UI Layout trong Android

View và ViewGroup trong Android

View và ViewGroup trong Android

Các thành phần cơ bản để xây dựng giao diện người dùng (UI) trong Android…

Intent Filters trong Android

Intent Filters trong Android

Trong bài này chúng ta sẽ tìm hiểu về Intent Filter trong Android

Explicit Intents trong Android

Explicit Intents trong Android

Trong bài này chúng ta sẽ tìm hiểu một loại Intent mới trong Android đó…

Implicit Intents trong Android

Implicit Intents trong Android

Trong bài này chúng ta sẽ tìm hiểu Implicit Intent trong Android

Cấu trúc thư mục Project Android

Cấu trúc thư mục Project Android

Trong bài này chúng ta sẽ tìm hiểu cấu trúc thư mục của một project…

Giới thiệu Intent trong Android

Giới thiệu Intent trong Android

Trong Android, Intent là những tin nhắn không đồng bộ cho phép các component

Fragment trong Android

Fragment trong Android

Trong bài này chúng ta sẽ tìm hiểu một khái niệm mới trong lập trình…

Services trong Android

Services trong Android

Trong bài này chúng ta sẽ tìm hiểu Services trong Android.

Content Providers trong Android

Content Providers trong Android

Bài này chúng ta sẽ tìm hiểu về content provider trong Android, nó đóng vai…

Activity trong Android

Activity trong Android

Trong Android, Activity biểu thị một màn hình đơn với giao diện người dùng (UI)…

Component trong một ứng dụng Android

Component trong một ứng dụng Android

Tạo trình giả lập Android hoặc Tạo AVD (Thiết bị ảo Android)

Tạo trình giả lập Android hoặc Tạo AVD (Thiết bị ảo Android)

Thiết bị ảo Android (AVD) là một trình giả lập được sử dụng để sao…

Chương trình

Chương trình "Hello World" Android

Bằng cách sử dụng IDE Android Studio (Integrated Development Environment tạm dịch :Môi trường phát…

Cấu trúc hệ điều hành Android

Cấu trúc hệ điều hành Android

Trong bài này chúng ta sẽ tìm hiểu một chút về cấu trúc của hệ…

Cài đặt Android Studio từng bước có hình ảnh minh họa

Cài đặt Android Studio từng bước có hình ảnh minh họa

Trong bài này mình sẽ hướng dẫn các bạn cách download và cài đặt Android…

Top