SlideShare una empresa de Scribd logo
1 de 16
BroadcastReceiver
MultiUni
Trần Vũ Tất Bình
Tổng quan
• BroadcastReceiver (có thể gọi là Receiver là
một trong bốn loại thành phần trong ứng dụng
Android. Chức năng dùng để nhận các sự kiện
mà các ứng dụng hoặc hệ thống phát đi.
• Có 2 cách phát-nhận đó là:
– Không có thứ tự: receiver nào đủ điều kiện thì
nhận hết, không phân biệt và cũng tách rời nhau.
– Có thứ tự: receiver nào đăng ký ưu tiên hơn thì
nhận trước, và có thể truyền thêm thông tin xử lý
cho các receiver sau.
Lifecycle
• Thực ra lifecycle của BroadcastReceiver chỉ
có duy nhất một phương thức onReceive().
– Khi có sự kiện mà BroadcastReceiver đã đăng ký
nhận được phát đi, thì phương thức onReceive()
của BroadcastReceiver đó sẽ được gọi.
– Sau khi thực thi xong phương thức này, lifercycle
của Receiver kết thúc.
Lưu ý khi sử dụng
• Ngay khi onReceive() kết thúc, hệ thống coi
như receiver đã không còn hoạt động và có thể
kill process chứa receiver này bất cứ lúc nào.
Tránh xử lý các code quá lâu trong onReceive().
 Không có xử lý bất đồng bộ, chờ callback… trong
Receiver (cụ thể như hiển thị Dialog, kết nối
service…)
Một số broadcast thông dụng
• Báo hệ thống khởi động xong
• Báo pin có sự thay đổi
• Báo có package mới cài vào hoặc xóa đi
• Báo tắt máy
• Báo cắm sạc, rút sạc…
Xem thêm tại đây, mục Standard Broadcast
Actions
Một số broadcast khác
• Thông báo tin nhắn tới
• Thông báo cắm, rút thẻ nhớ
• Thông báo có cuộc gọi đi
• Và các bạn có thể định nghĩa broadcast cho
riêng mình (mục tiêu chính của việc này giúp
bạn có thể liên lạc giữa các ứng dụng bạn viết
hoặc thông báo một sự kiện liên quan đến ứng
dụng của bạn với các ứng dụng khác)
onReceive()
• Phương thức này được gọi khi có sự kiện
tương ứng được phát đi. Ở trong phương thức
này, ta thấy truyền vào context và intent.
– Vì Receiver không kế thừa từ Context nên cần
truyền context mà receiver này đang chạy vào.
Thứ nhất, để có thể xử lý các phương thức yêu cầu
truyền thêm Context, thứ 2, để sử dụng các
phương thức của lớp Context. (còn nữa hay không thì các
bạn giúp mình luôn nhé)
onReceive()
– Intent được truyền vào sẽ có đầy đủ thông tin như
sự kiện nào mà receiver này đăng ký đã xảy ra dẫn
đến onReceive() được gọi. Có gửi kèm thông tin gì
hoặc dữ liệu gì hay không. Xem các api:
Intent.getAction()
Intent.get…Extra(String dataName)
Ví dụ BootReceiver
• Các bạn có thể đăng ký nhận sự kiện hệ thống
vừa khởi động xong để có thể làm việc gì đó
ngay, hoặc vận hành song song với hệ thống…
• Ta sẽ đăng ký nhận sự kiện BOOT_COMPLETED,
sau đó sẽ gọi một dialog lên hiển thi lời chào.
• Khi hệ thống khởi động xong sẽ xuất một
dialog chào user 
Ví dụ BootReceiver
• Trong manifest, cần đăng ký permission được
nhận sự kiện này
<uses-permission
android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
• Khai báo receiver bên trong thẻ application
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
Ví dụ BootReceiver
• Ở đây ta khai báo trong manifest là ứng dụng
có một receiver tên là BootReceiver (slide kế
sẽ thấy).
• BootReceiver này đăng ký nhận sự kiện “hệ
thổng khởi động hoàn tất”.
• Dĩ nhiên, muốn nhận sựu kiện dạng này thì
cần phải đăng kí trước để với hệ thống qua
permission để user được biết.
Ví dụ BootReceiver
• Tạo một class mới trong source, tên là
BootReceiver kế thừa BroadcastReceiver.
• Implement lại phương thức onReceive() với
code như sau:
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent helloIntent = new Intent(context, HelloBootActivity.class);
helloIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(helloIntent);
}
Ví dụ BootReceiver
• Giải thích một chút: vì Receiver không kế thừa
context nên khi tạo intent mới không truyền
this vô được, thay vào đó truyền cái context đã
được gửi kèm.
• Vì không ở trong 1 activity mà đang ở trong 1
receiver, và một số vấn đề liên quan tới task
trong Android nên bạn phải thêm cờ
Intent.FLAG_ACTIVITY_NEW_TASK (bạn chỉ có
thể ko dùng cờ này khi bạn gọi startActivity()
từ một activity)
Ví dụ BootReceiver
• Đọc tới đây chắc các bạn hiểu ngay là ứng dụng
có một activity tên là HelloBootActivity, activity
này sẽ chỉ hiển thị dạng dialog, và sẽ không được
start bằng cách bấm vào icon trên màn hình. Vì
thế, khai báo trong manifest như sau:
<activity android:name=".HelloBootActivity"
android:theme="@android:style/Theme.Dialog">
</activity>
• Còn activity chỉ hiển thị một cái TextView là
“Chào bạn, mới khởi động xong” và một cái
Button để bấm vào đó thì đóng activity, các bạn
hoàn tất nhé.
Phát sự kiện
• Các bạn có thể phát một sự kiện cho các
receiver khác nhận dạng như sau:
Intent intent = new
Intent("org.multiuni.android.BROADCAST_DEMO");
sendBroadcast(intent);
• Hoặc:
sendOrderedBroadcast(intent, "permission tùy ý hoặc null");
• Ngoài ra còn có một số các gửi broadcast
khác, các bạn tham khảo thêm trong class
ContextWrapper nhé
Bài tập yêu cầu
1. Làm ứng dụn BootReceiver vừa rồi.
2. Lên g-android, tìm code mẫu về chuyển
hướng cuộc gọi, làm cái đó (cũng receiver)
3. Viết 2 ứng dụng, ứng dụng A nhập vào một
chuỗi rồi phát đi một sự kiện tự định nghĩa,
kèm theo chuỗi đó. Ứng dụng B nhận sự kiện
đó và hiển thị một Toast có nội dung là chuỗi
nhận được.

Más contenido relacionado

Destacado

Cookie Seminar | 5 juni | Damian Scragg | Evidon
Cookie Seminar | 5 juni | Damian Scragg | EvidonCookie Seminar | 5 juni | Damian Scragg | Evidon
Cookie Seminar | 5 juni | Damian Scragg | Evidonclickdistrict
 
Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...
Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...
Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...clickdistrict
 
Cookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdL
Cookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdLCookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdL
Cookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdLclickdistrict
 
1.gioi thieu ve android sdk
1.gioi thieu ve android sdk1.gioi thieu ve android sdk
1.gioi thieu ve android sdkJustin Hoang
 
Cookie Seminar | 5 juni | Lauren van der Heijden | IAB
Cookie Seminar | 5 juni | Lauren van der Heijden | IABCookie Seminar | 5 juni | Lauren van der Heijden | IAB
Cookie Seminar | 5 juni | Lauren van der Heijden | IABclickdistrict
 
Tutorial How to change the icon
Tutorial How to change the iconTutorial How to change the icon
Tutorial How to change the iconJustin Hoang
 
7. xu ly bat dong bo
7. xu ly bat dong bo7. xu ly bat dong bo
7. xu ly bat dong boJustin Hoang
 
University of California, Berkeley Technology Transfer and IP Commercialization
University of California, Berkeley Technology Transfer and IP CommercializationUniversity of California, Berkeley Technology Transfer and IP Commercialization
University of California, Berkeley Technology Transfer and IP CommercializationOphelia Yeung
 

Destacado (8)

Cookie Seminar | 5 juni | Damian Scragg | Evidon
Cookie Seminar | 5 juni | Damian Scragg | EvidonCookie Seminar | 5 juni | Damian Scragg | Evidon
Cookie Seminar | 5 juni | Damian Scragg | Evidon
 
Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...
Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...
Kennedy van der Laan 27 maart 2013 | Nicole Wolters Ruckert & Annemieke van H...
 
Cookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdL
Cookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdLCookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdL
Cookie Seminar | 5 juni | Nicole Wolters Ruckert | KVdL
 
1.gioi thieu ve android sdk
1.gioi thieu ve android sdk1.gioi thieu ve android sdk
1.gioi thieu ve android sdk
 
Cookie Seminar | 5 juni | Lauren van der Heijden | IAB
Cookie Seminar | 5 juni | Lauren van der Heijden | IABCookie Seminar | 5 juni | Lauren van der Heijden | IAB
Cookie Seminar | 5 juni | Lauren van der Heijden | IAB
 
Tutorial How to change the icon
Tutorial How to change the iconTutorial How to change the icon
Tutorial How to change the icon
 
7. xu ly bat dong bo
7. xu ly bat dong bo7. xu ly bat dong bo
7. xu ly bat dong bo
 
University of California, Berkeley Technology Transfer and IP Commercialization
University of California, Berkeley Technology Transfer and IP CommercializationUniversity of California, Berkeley Technology Transfer and IP Commercialization
University of California, Berkeley Technology Transfer and IP Commercialization
 

Similar a 5. broadcast receiver

Hướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiverHướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiverWendy587439
 
Life cycle của Android
Life cycle của AndroidLife cycle của Android
Life cycle của AndroidNguyễn Anh
 
Bài 4: Event handle, Action & Intent
Bài 4: Event handle, Action & IntentBài 4: Event handle, Action & Intent
Bài 4: Event handle, Action & Intenthoccungdoanhnghiep
 
Android chapter22-services
Android chapter22-servicesAndroid chapter22-services
Android chapter22-servicesmanhvokiem
 
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong boHướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong boWendy587439
 
Hướng Dẫn Lập Trình Android: 4. Activity trong Android
Hướng Dẫn Lập Trình Android: 4. Activity trong AndroidHướng Dẫn Lập Trình Android: 4. Activity trong Android
Hướng Dẫn Lập Trình Android: 4. Activity trong AndroidWendy587439
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việtlaptrinhandroid
 
Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5Thanh Tuan Ngo
 
Videoconferencereport
VideoconferencereportVideoconferencereport
Videoconferencereporttuanle1984
 
Fault tolerance làm rõ đối với Distributed File System
Fault tolerance làm rõ đối với Distributed File SystemFault tolerance làm rõ đối với Distributed File System
Fault tolerance làm rõ đối với Distributed File SystemThường Thường
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Androidhoccungdoanhnghiep
 
Part 14 software deloyment -www.key4_vip.info
Part 14   software deloyment -www.key4_vip.infoPart 14   software deloyment -www.key4_vip.info
Part 14 software deloyment -www.key4_vip.infolaonap166
 
Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2hoccungdoanhnghiep
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc androiddhinh_190192
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 

Similar a 5. broadcast receiver (20)

Hướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiverHướng Dẫn Lập Trình Android: 5. BroadcastReceiver
Hướng Dẫn Lập Trình Android: 5. BroadcastReceiver
 
Life cycle của Android
Life cycle của AndroidLife cycle của Android
Life cycle của Android
 
Bài 4: Event handle, Action & Intent
Bài 4: Event handle, Action & IntentBài 4: Event handle, Action & Intent
Bài 4: Event handle, Action & Intent
 
Android chapter22-services
Android chapter22-servicesAndroid chapter22-services
Android chapter22-services
 
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong boHướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
Hướng Dẫn Lập Trình Android: 7. Xu ly bat dong bo
 
SMS-2 (1).pptx
SMS-2 (1).pptxSMS-2 (1).pptx
SMS-2 (1).pptx
 
Vb6 16 (10)
Vb6 16 (10)Vb6 16 (10)
Vb6 16 (10)
 
Hướng Dẫn Lập Trình Android: 4. Activity trong Android
Hướng Dẫn Lập Trình Android: 4. Activity trong AndroidHướng Dẫn Lập Trình Android: 4. Activity trong Android
Hướng Dẫn Lập Trình Android: 4. Activity trong Android
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việt
 
Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5Bao cao thuc tap tuan 5
Bao cao thuc tap tuan 5
 
Videoconferencereport
VideoconferencereportVideoconferencereport
Videoconferencereport
 
Fault tolerance làm rõ đối với Distributed File System
Fault tolerance làm rõ đối với Distributed File SystemFault tolerance làm rõ đối với Distributed File System
Fault tolerance làm rõ đối với Distributed File System
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Android
 
Part 14 software deloyment -www.key4_vip.info
Part 14   software deloyment -www.key4_vip.infoPart 14   software deloyment -www.key4_vip.info
Part 14 software deloyment -www.key4_vip.info
 
Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2Giới thiệu Android- Bài 2
Giới thiệu Android- Bài 2
 
Cấu trúc android
Cấu trúc androidCấu trúc android
Cấu trúc android
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Tuan 3
Tuan 3Tuan 3
Tuan 3
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycle
 
Ngân hàng hệ thống phân tán PTIT
Ngân hàng hệ thống phân tán PTITNgân hàng hệ thống phân tán PTIT
Ngân hàng hệ thống phân tán PTIT
 

Más de Justin Hoang

Tổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMSTổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMSJustin Hoang
 
Tam bien kieu Phap
Tam bien kieu PhapTam bien kieu Phap
Tam bien kieu PhapJustin Hoang
 
Huong dan su dung Adobe Presenter
Huong dan su dung Adobe PresenterHuong dan su dung Adobe Presenter
Huong dan su dung Adobe PresenterJustin Hoang
 
Giao trinh corel draw
Giao trinh corel drawGiao trinh corel draw
Giao trinh corel drawJustin Hoang
 
3.thiet ke giao dien tren android
3.thiet ke giao dien tren android3.thiet ke giao dien tren android
3.thiet ke giao dien tren androidJustin Hoang
 
2.bat dau voi hello world
2.bat dau voi hello world2.bat dau voi hello world
2.bat dau voi hello worldJustin Hoang
 
Hacking your Android (slides)
Hacking your Android (slides)Hacking your Android (slides)
Hacking your Android (slides)Justin Hoang
 
Android chapter 02 - Setup to emulator
Android chapter 02 - Setup to emulatorAndroid chapter 02 - Setup to emulator
Android chapter 02 - Setup to emulatorJustin Hoang
 
Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)Justin Hoang
 
Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)Justin Hoang
 
Universal modules TXM1.8x Siemens
Universal modules TXM1.8x SiemensUniversal modules TXM1.8x Siemens
Universal modules TXM1.8x SiemensJustin Hoang
 
Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)Justin Hoang
 
Cach in file auto cad
Cach in file auto cadCach in file auto cad
Cach in file auto cadJustin Hoang
 

Más de Justin Hoang (16)

Tổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMSTổng quan tài liệu Hướng dẫn hệ thống BMS
Tổng quan tài liệu Hướng dẫn hệ thống BMS
 
Tam bien kieu Phap
Tam bien kieu PhapTam bien kieu Phap
Tam bien kieu Phap
 
Huong dan su dung Adobe Presenter
Huong dan su dung Adobe PresenterHuong dan su dung Adobe Presenter
Huong dan su dung Adobe Presenter
 
Giao trinh corel draw
Giao trinh corel drawGiao trinh corel draw
Giao trinh corel draw
 
6. service
6. service6. service
6. service
 
3.thiet ke giao dien tren android
3.thiet ke giao dien tren android3.thiet ke giao dien tren android
3.thiet ke giao dien tren android
 
2.bat dau voi hello world
2.bat dau voi hello world2.bat dau voi hello world
2.bat dau voi hello world
 
Hacking your Android (slides)
Hacking your Android (slides)Hacking your Android (slides)
Hacking your Android (slides)
 
Android chapter 02 - Setup to emulator
Android chapter 02 - Setup to emulatorAndroid chapter 02 - Setup to emulator
Android chapter 02 - Setup to emulator
 
Access Toan Tap
Access Toan TapAccess Toan Tap
Access Toan Tap
 
Autocad toan tap
Autocad toan tapAutocad toan tap
Autocad toan tap
 
Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)Giao trinh Corel Draw (By Hoang Ngoc Giao)
Giao trinh Corel Draw (By Hoang Ngoc Giao)
 
Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)Giao trinh mang may tinh (Toan tap)
Giao trinh mang may tinh (Toan tap)
 
Universal modules TXM1.8x Siemens
Universal modules TXM1.8x SiemensUniversal modules TXM1.8x Siemens
Universal modules TXM1.8x Siemens
 
Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)Mod Two Homology and Cohomology (Jean Claude)
Mod Two Homology and Cohomology (Jean Claude)
 
Cach in file auto cad
Cach in file auto cadCach in file auto cad
Cach in file auto cad
 

5. broadcast receiver

  • 2. Tổng quan • BroadcastReceiver (có thể gọi là Receiver là một trong bốn loại thành phần trong ứng dụng Android. Chức năng dùng để nhận các sự kiện mà các ứng dụng hoặc hệ thống phát đi. • Có 2 cách phát-nhận đó là: – Không có thứ tự: receiver nào đủ điều kiện thì nhận hết, không phân biệt và cũng tách rời nhau. – Có thứ tự: receiver nào đăng ký ưu tiên hơn thì nhận trước, và có thể truyền thêm thông tin xử lý cho các receiver sau.
  • 3. Lifecycle • Thực ra lifecycle của BroadcastReceiver chỉ có duy nhất một phương thức onReceive(). – Khi có sự kiện mà BroadcastReceiver đã đăng ký nhận được phát đi, thì phương thức onReceive() của BroadcastReceiver đó sẽ được gọi. – Sau khi thực thi xong phương thức này, lifercycle của Receiver kết thúc.
  • 4. Lưu ý khi sử dụng • Ngay khi onReceive() kết thúc, hệ thống coi như receiver đã không còn hoạt động và có thể kill process chứa receiver này bất cứ lúc nào. Tránh xử lý các code quá lâu trong onReceive().  Không có xử lý bất đồng bộ, chờ callback… trong Receiver (cụ thể như hiển thị Dialog, kết nối service…)
  • 5. Một số broadcast thông dụng • Báo hệ thống khởi động xong • Báo pin có sự thay đổi • Báo có package mới cài vào hoặc xóa đi • Báo tắt máy • Báo cắm sạc, rút sạc… Xem thêm tại đây, mục Standard Broadcast Actions
  • 6. Một số broadcast khác • Thông báo tin nhắn tới • Thông báo cắm, rút thẻ nhớ • Thông báo có cuộc gọi đi • Và các bạn có thể định nghĩa broadcast cho riêng mình (mục tiêu chính của việc này giúp bạn có thể liên lạc giữa các ứng dụng bạn viết hoặc thông báo một sự kiện liên quan đến ứng dụng của bạn với các ứng dụng khác)
  • 7. onReceive() • Phương thức này được gọi khi có sự kiện tương ứng được phát đi. Ở trong phương thức này, ta thấy truyền vào context và intent. – Vì Receiver không kế thừa từ Context nên cần truyền context mà receiver này đang chạy vào. Thứ nhất, để có thể xử lý các phương thức yêu cầu truyền thêm Context, thứ 2, để sử dụng các phương thức của lớp Context. (còn nữa hay không thì các bạn giúp mình luôn nhé)
  • 8. onReceive() – Intent được truyền vào sẽ có đầy đủ thông tin như sự kiện nào mà receiver này đăng ký đã xảy ra dẫn đến onReceive() được gọi. Có gửi kèm thông tin gì hoặc dữ liệu gì hay không. Xem các api: Intent.getAction() Intent.get…Extra(String dataName)
  • 9. Ví dụ BootReceiver • Các bạn có thể đăng ký nhận sự kiện hệ thống vừa khởi động xong để có thể làm việc gì đó ngay, hoặc vận hành song song với hệ thống… • Ta sẽ đăng ký nhận sự kiện BOOT_COMPLETED, sau đó sẽ gọi một dialog lên hiển thi lời chào. • Khi hệ thống khởi động xong sẽ xuất một dialog chào user 
  • 10. Ví dụ BootReceiver • Trong manifest, cần đăng ký permission được nhận sự kiện này <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> • Khai báo receiver bên trong thẻ application <receiver android:name=".BootReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>
  • 11. Ví dụ BootReceiver • Ở đây ta khai báo trong manifest là ứng dụng có một receiver tên là BootReceiver (slide kế sẽ thấy). • BootReceiver này đăng ký nhận sự kiện “hệ thổng khởi động hoàn tất”. • Dĩ nhiên, muốn nhận sựu kiện dạng này thì cần phải đăng kí trước để với hệ thống qua permission để user được biết.
  • 12. Ví dụ BootReceiver • Tạo một class mới trong source, tên là BootReceiver kế thừa BroadcastReceiver. • Implement lại phương thức onReceive() với code như sau: if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent helloIntent = new Intent(context, HelloBootActivity.class); helloIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(helloIntent); }
  • 13. Ví dụ BootReceiver • Giải thích một chút: vì Receiver không kế thừa context nên khi tạo intent mới không truyền this vô được, thay vào đó truyền cái context đã được gửi kèm. • Vì không ở trong 1 activity mà đang ở trong 1 receiver, và một số vấn đề liên quan tới task trong Android nên bạn phải thêm cờ Intent.FLAG_ACTIVITY_NEW_TASK (bạn chỉ có thể ko dùng cờ này khi bạn gọi startActivity() từ một activity)
  • 14. Ví dụ BootReceiver • Đọc tới đây chắc các bạn hiểu ngay là ứng dụng có một activity tên là HelloBootActivity, activity này sẽ chỉ hiển thị dạng dialog, và sẽ không được start bằng cách bấm vào icon trên màn hình. Vì thế, khai báo trong manifest như sau: <activity android:name=".HelloBootActivity" android:theme="@android:style/Theme.Dialog"> </activity> • Còn activity chỉ hiển thị một cái TextView là “Chào bạn, mới khởi động xong” và một cái Button để bấm vào đó thì đóng activity, các bạn hoàn tất nhé.
  • 15. Phát sự kiện • Các bạn có thể phát một sự kiện cho các receiver khác nhận dạng như sau: Intent intent = new Intent("org.multiuni.android.BROADCAST_DEMO"); sendBroadcast(intent); • Hoặc: sendOrderedBroadcast(intent, "permission tùy ý hoặc null"); • Ngoài ra còn có một số các gửi broadcast khác, các bạn tham khảo thêm trong class ContextWrapper nhé
  • 16. Bài tập yêu cầu 1. Làm ứng dụn BootReceiver vừa rồi. 2. Lên g-android, tìm code mẫu về chuyển hướng cuộc gọi, làm cái đó (cũng receiver) 3. Viết 2 ứng dụng, ứng dụng A nhập vào một chuỗi rồi phát đi một sự kiện tự định nghĩa, kèm theo chuỗi đó. Ứng dụng B nhận sự kiện đó và hiển thị một Toast có nội dung là chuỗi nhận được.