CĂN BẢN
INTENTS
GIAO DIỆN
CÁC KHÁI NIỆM
VÍ DỤ
TÀI LIỆU
HỌC LẬP TRÌNH ANDROID
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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ó.

test php

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.

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.

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.

Bài viết này được đăng tại [free tuts .net]

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:

Tìm hiểu về vòng đời của Activity trong Android

Tìm hiểu về vòng đời của Activity trong Android

AlarmManager trong Android

AlarmManager trong Android

Menu trong Android

Menu trong Android

Fragments trong Android

Fragments trong Android

SearchView trong Android

SearchView trong Android

TabLayout trong Android

TabLayout trong Android

ViewStub trong Android

ViewStub trong Android

Image Slider trong Android

Image Slider trong Android

Trình chuyển đổi hình ảnh (Image Switcher) trong Android

Trình chuyển đổi hình ảnh (Image Switcher) trong Android

ScrollView trong Android

ScrollView trong Android

ProgressBar trong Android

ProgressBar trong Android

Đồng hồ Analog và đồng hồ kỹ thuật số trong Android

Đồng hồ Analog và đồng hồ kỹ thuật số trong Android

Cách dùng TimePicker trong Android

Cách dùng TimePicker trong Android

Cách dùng DatePicker trong Android

Cách dùng DatePicker trong Android

Cách dùng SeekBar trong Android

Cách dùng SeekBar trong Android

Cách dùng WebView trong Android

Cách dùng WebView trong Android

Cách dùng RatingBar trong Android

Cách dùng RatingBar trong Android

Cách dùng ListView trong Android

Cách dùng ListView trong Android

AutoCompleteTextView trong Android

AutoCompleteTextView trong Android

Spinner trong Android

Spinner trong Android

Top