12/08/2018, 14:03

BroadcastReceiver Trong Android (Part2)

1. Giới thiệu Như trong bài viết Broadcast Receiver Part1 mình đã giới thiệu cách bắt các sự kiện của hệ thống như tin nhắn...Trong bài viết hôm nay mình xin giới thiệu với các bạn cách bắt 1 sự kiện do chính chúng ta tạo ra 2. Demo ứng dụng Mình sẽ demo 1 ứng dụng rất đơn giản là cộng 2 ...

1. Giới thiệu

Như trong bài viết Broadcast Receiver Part1 mình đã giới thiệu cách bắt các sự kiện của hệ thống như tin nhắn...Trong bài viết hôm nay mình xin giới thiệu với các bạn cách bắt 1 sự kiện do chính chúng ta tạo ra

2. Demo ứng dụng

Mình sẽ demo 1 ứng dụng rất đơn giản là cộng 2 số để cho các bạn hiểu cách tạo 1 sự kiện và bắt 1 sự kiện. Nếu như bắt các sự kiện của máy chúng ta chỉ cần cấp quyền trong AndroidManifest thì khi tự tạo 1 sự kiện thì chúng ta phải đăng kí và hủy đăng kí trong code java

B1. Tạo project mới

B2. Thiết kế giao diện

Tạo 1 layout đơn giản với 2 EditText và 1 Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_awidth="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.nguyendinhduy.lab14_broadcastadvanced.MainActivity">

    <EditText
        android:layout_awidth="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:hint="Input1"
        android:id="@+id/editText1" />
    <EditText
        android:layout_awidth="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:hint="Input2"
        android:id="@+id/editText2" />
    <Button
        android:id="@+id/btn"
        android:text="Plus"
        android:layout_gravity="center"
        android:layout_awidth="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

B3. Xử lý code trong MainActivity.java

package com.example.nguyendinhduy.lab14_broadcastadvanced;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private EditText edtA, edtB;
    private Button btn;
    private CalculatorReceiver receiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initComponents();
        receiver = new CalculatorReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(Key.ACTION_PLUS_NUMBER);
        registerReceiver(receiver, filter);
    }

    private void initComponents() {
        edtA = (EditText) findViewById(R.id.editText1);
        edtB = (EditText) findViewById(R.id.editText2);
        btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        try {
            int a = Integer.parseInt(edtA.getText().toString());
            int b = Integer.parseInt(edtB.getText().toString());
            Intent intent=new Intent();
            intent.setAction(Key.ACTION_PLUS_NUMBER);
            intent.putExtra(Key.NUMBER_A,a);
            intent.putExtra(Key.NUMBER_B,b);
            sendBroadcast(intent);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        unregisterReceiver(receiver);
        super.onDestroy();
    }
}
  • Ta tạo class Key để định nghĩa các hằng số : Việc này là không bắt buộc nhưng nên làm như vậy cho code trở nên tường minh và chuẩn hơn.

B4. Class Key.java

package com.example.nguyendinhduy.lab14_broadcastadvanced;

public class Key {
    public static final String ACTION_PLUS_NUMBER="com.example.nguyendinhduy.lab14_broadcastadvanced.action_add_number";
    public static final String NUMBER_A="nuber_a";
    public static final String NUMBER_B="nuber_b";
}
  • Trong class MainActivity.java ta đã đăng kí 1 sự kiện và chuyển việc xử lí sự kiện đó sang cho class CalculatorReceiver.java

B5. Class CalculatorReceiver.java

package com.example.nguyendinhduy.lab14_broadcastadvanced;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.widget.Toast;

public class CalculatorReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        switch (intent.getAction()) {
            case Key.ACTION_PLUS_NUMBER:
                int a=intent.getIntExtra(Key.NUMBER_A,0);
                int b=intent.getIntExtra(Key.NUMBER_B,0);
                Toast.makeText(context,"Result: "+(a+b),Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}
0