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; } } }