Friday, March 5, 2021

Tìm hiểu BroadcasrReceivers Android

Trong android, Tìm hiểu BroadcasrReceivers Android là một thành phần sẽ cho phép hệ thống Android hoặc các ứng dụng khác gửi các sự kiện đến ứng dụng như gửi thông báo pin yếu hoặc màn hình tắt thông báo đến ứng dụng. Các ứng dụng cũng có thể bắt đầu phát sóng để 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ói chung, chúng tôi sử dụng Intents để cung cấp các sự kiện phát sóng đến các ứng dụng khác và Người nhận phát sóng sử dụng thông báo trên thanh trạng thái để cho người dùng biết rằng sự kiện phát sóng xảy ra.

BroadcasrReceivers Android

Trong android, Broadcast Receiver được thực hiện như một lớp con của BroadcastReceiver và mỗi broadcast được phân phối dưới dạng một đối tượng Intent .

Chúng tôi có thể đăng ký một ứng dụng để chỉ nhận một số tin nhắn quảng bá dựa trên yêu cầu của chúng tôi. Khi một chương trình phát sóng mới nhận được, hệ thống sẽ kiểm tra các chương trình phát sóng cụ thể đã được đăng ký hay chưa, dựa vào đó nó sẽ định tuyến chương trình phát sóng đến các ứng dụng.

Receiving Broadcasts Android

Trong thủ thuật lập trình android, chúng ta có thể nhận các chương trình phát sóng bằng cách đăng ký theo hai cách.

Một cách là đăng ký chương trình phát sóng bằng tệp kê khai ứng dụng Android ( AndroidManifest.xml ). Chúng ta cần chỉ định phần tử <receiver> trong tệp kê khai ứng dụng như hình dưới đây.

<receiver android:name=".SampleBroadcastReceiver">

    <intent-filter>

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

    </intent-filter>

</receiver>

Câu lệnh trên sẽ kích hoạt sự kiện phát sóng hệ thống đã xác định bất cứ khi nào quá trình khởi động hoàn tất.

Một cách khác là đăng ký động một bộ thu thông qua phương thức Context.registerReceiver () . Để đăng ký bộ thu quảng bá, chúng ta cần mở rộng lớp của mình bằng BroadcastReceiver và cần triển khai phương thức  onReceive (Context, Intent) như hình dưới đây.

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 hoàn tất, phương thức onReceive () của bộ thu phát sóng sẽ được gọi.

Sending Broadcasts trong Android

Trong Android, chúng ta có thể gửi chương trình phát sóng trong ứng dụng bằng ba cách khác nhau, đó là

sendOrderedBroadcast(Intent, String) : Phương pháp này được sử dụng để gửi các chương trình phát sóng đến một máy thu tại một thời điểm.

sendBroadcast(Intent): Phương thức này được sử dụng để gửi các chương trình phát sóng đến tất cả các máy thu theo một thứ tự không xác định.

LoadBroadcastManager.sendBroadcas: Phương thức này được sử dụng để gửi chương trình phát sóng đến người nhận trong cùng một ứng dụng với người gửi.

Broadcasting Custom Intents

Trong android, chúng ta có thể tạo các chương trình phát sóng tùy chỉnh của riêng mình bằng cách sử dụng ý định . Sau đây là đoạn mã đơn giản để gửi một chương trình phát sóng bằng cách tạo một ý định sử dụng phương thức sendBroadcast (Intent) .

Intent sintent = new Intent();

intent.setAction("com.anhttvn.broadcast.MY_NOTIFICATION");

intent.putExtra("data","Welcome to Tienanhvn");

sendBroadcast(intent);

Chúng tôi đang đăng ký một hành động theo ý của mình, chúng ta cần phải khai báo trong mainfest như dưới đây.

<receiver android:name=".SampleBroadcastReceiver">

    <intent-filter>

        <action android:name=" com.anhttvn.broadcast.MY_NOTIFICATION"/>

    </intent-filter>

</receiver>

Những System Broadcast trong Android

  • android.intent.action.BOOT_COMPLETED : Nó tạo ra một sự kiện, sau khi khởi động hoàn tất.
  • android.intent.action.POWER_CONNECTED: Nó đượ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: Nó được sử dụng để kích hoạt một sự kiện khi nguồn điện bị ngắt khỏi thiết bị.
  • android.intent.action.BATTERY_LOW: Nó được sử dụng để gọi một sự kiện khi thiết bị sắp hết pin.
  • android.intent.action.BATTERY_OKAY: Nó được sử dụng để gọi một sự kiện khi pin OKAY trở lại.
  • android.intent.action.REBOOT: Nó gọi một sự kiện khi thiết bị khởi động lại lần nữa.

Ví dụ tạo BroadcasrReceivers trong Android

Để thiết lập Bộ thu phát sóng trong ứng dụng Android của chúng ta, chúng ta cần thực hiện những việc sau.

  • Tạo một BroadcastReceiver
  • Đăng ký BroadcastReceiver

Tạo một ứng dụng android mới bằng cách sử dụng studio android và đặt tên là BroadcastReceiver

Tạo một class MyBroadcastReceiver.java

public class MyBroadcastReceiver extends BroadcastReceiver {

   @Override

    public void onReceive(Context context, Intent intent){

       CharSequence iData = intent.getCharSequenceExtra("msg");

       Toast.makeText(context,"Anhttvn Received Message: "+iData,Toast.LENGTH_LONG).show();

   }

}

Bây giờ tiếp tục tạo một layout 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>

Tiếp theo tạo một class main.java

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.anhttvn.CUSTOM_INTENT");

        sendBroadcast(intent);

    }

}

Chúng ta cần phải đăng ký broadcast trong mainfest

<?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.anhttvn.CUSTOM_INTENT">

                </action>

            </intent-filter>

        </receiver>

    </application>

</manifest>

No comments:

Post a Comment