Local Broadcast trong Android
Hello ! Hôm nay mình xin giới thiệu đến mọi người một phương pháp truyền và nhận tín hiệu, dữ liệu trong Android đơn giản. Mình thấy nó khá hay và hưu ích nên muốn chia sẻ đến mọi người. Đó là Local Broadcast. Ưu điểm Bạn sẽ không phải lo lắng về việc dò rỉ dữ liệu vì dữ liệu chỉ được gói gọn ...
Hello ! Hôm nay mình xin giới thiệu đến mọi người một phương pháp truyền và nhận tín hiệu, dữ liệu trong Android đơn giản. Mình thấy nó khá hay và hưu ích nên muốn chia sẻ đến mọi người. Đó là Local Broadcast.
Ưu điểm
- Bạn sẽ không phải lo lắng về việc dò rỉ dữ liệu vì dữ liệu chỉ được gói gọn trong project của bạn mà thôi.
- Bạn không phải lo lắng về các lỗ hổng bảo mật vì nó không send broadcast với ứng dụng khác.
- It is more efficient than sending a global broadcast through the system.
Setup
Để send một Broadcast rất đơn giản. Bạn chỉ cần khai báo một Intent
Intent intent = new Intent();
Set action cho Intent
intent.setAction("My Broadcast")
Xét dữ liệu bạn muốn truyền đi nếu có
intent.putExtra("id",12345);
Và gửi
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
Vậy là bạn đã hoạn thiện xong việc send một broadcast rồi. Bây giờ thì ở bất kỳ một chỗ nào trong project của bạn, bạn đều có thể nhận broadcast này để lấy dữ liệu id mà bạn mong muốn. Để nhận dữ liệu đậu tiên bạn phải đăng kí để có thể lắng nghe được broadcast của mình . Đầu tiên bạn phải khai báo một BroadcastReceiver để quản lý chương trình truyền phát dữ liệu. Bạn sẽ phải khai báo một IntentFilter để quản lý việc chọn lọc broadcast.
private BroadcastReceiver mRefreshReceiver; IntentFilter filter = new IntentFilter(); filter.addAction("My Broadcast"); mRefreshReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("My Broadcast")) { // TODO something // Ở đây intent chứa dữ liệu id mà bạn đã gửi kèm intent } } };
Và cuối cùng là nhận bất kì một broadcast nào phù hợp với cái mà IntentFilter đã chọn.
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mRefreshReceiver, filter);
Và hủy đăng ký
@Override public void onDestroy() { super.onDestroy(); LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mRefreshReceiver); }
Note
- Broadcast sẽ truyền intent cho tất cả các BroadcastReceive nào phù hợp. Việc này được thực hiện không đồng bộ. Nó sẽ trả về ngay lập tức, và bạn sẽ tiếp tục thực hiện trong khi receivers được chạy.
Tham khảo thêm tại đây