Your SlideShare is downloading. ×
Android Nâng cao-Bài 3: Broadcast Receiver
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Android Nâng cao-Bài 3: Broadcast Receiver

1,064
views

Published on

Đây là bài trong khoá đào tạo 9 bài về lập trình Android nâng cao.

Đây là bài trong khoá đào tạo 9 bài về lập trình Android nâng cao.

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,064
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ANDROID NÂNG CAO Bài 3: Broadcast Receiver
  • 2. Nội dung bài học ● Send broadcast một Intent. ● System broadcast. ● Hiện thực Broadcast Receiver. ● Vòng đời của Broadcast Receiver. ● Hạn chế của Broadcast Receiver. ● Đăng ký broadcast receiver bằng code. ● Disable receiver đã đăng ký trong manifest. ● Sticky Broadcast Intent
  • 3. Send broadcast một Intent ● Send trong cùng một process. ● Send cho toàn hệ thống.
  • 4. Send broadcast một Intent ● Send trong cùng một process: ● Sử dụng các phương thức sau đây để send broadcast một Intent trong một process: – – LocalBroadcastManager#sendBroadcast → asynchronous LocalBroadcastManager#sendBroadcastSync → nếu có receiver cho Intent thì phương thức này sẽ block và ngay lập tức gọi receiver thực thi.
  • 5. Send broadcast một Intent ● Send cho toàn bộ hệ thống: ● Sử dụng các phương thức sau đây để send broadcast một Intent cho toàn bộ hệ thống: – – Context#sendBroadcast → asynchronous, unordered Context#sendOrderedBroadcast: ● ● ● ● One receiver at a time. The order is configured by android:priority. If the priorities are same, the order is undetermined. The result of the first receiver is passed to the next one. We can abort the broadcast to stop the result propogate.
  • 6. System Broadcast ● ● Trong Android nhiều system event được hệ thống gửi đến toàn bộ các ứng dụng trong hệ thống dưới dạng các broadcast intent. Các intent này có các action định nghĩa dưới dạng các biến final static trong lớp Intent cũng như các lớp khác như TelephonyManager. Một số event quan trọng: ● Intent.ACTION_BOOT_COMPLETED ● Intent.ACTION_BATTERY_LOW ● Intent.ACTION_BATTERY_OKAY
  • 7. Hiện thực Broadcast Receiver ● Kế thừa lớp BroadcastReceiver. ● Hiện thực phương thức onReceiver. ● Đăng ký receiver vào AndroidManifest.xml
  • 8. Hiện thực Broadcast Receiver ● Kế thừa lớp BroadcastReceiver. ● Hiện thực phương thức onReceiver. ● Đăng ký receiver vào AndroidManifest.xml
  • 9. Hiện thực Broadcast Receiver public class SampleReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //Nếu cần chúng ta cần kiểm tra action của intent chúng ta nhận // đúng là action mà chúng ta mong đợi rồi mới thực hiện // phần nghiệp vụ Intent service = new Intent(context, SampleService.class); context.startService(service); } } <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> ... <receiver android:name="SampleReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> ...
  • 10. Hiện thực Broadcast Receiver ● Lưu ý: ● ● ● Nếu chương trình cài đặt ở SD Card (thuộc tính location) thì chương trình không nhận được sự kiện ACTION_BOOT_COMPLETED vì sự kiện này xảy ra trước khi chương trình thực thi. Trong tình huống này chúng ta dùng sự kiện: ACTION_EXTERNAL_APPLICATIONS_AVAILABLE Trên các điện thoại HTC, sự kiện này cũng không nhận được khi chạy dưới chế độ “Fast Boot”. Từ Android 3.0, người dùng cần start ứng dụng ít nhất 1 lần thì ứng dụng mới nhận sự kiện này.
  • 11. Vòng đời của Broadcast Receiver ● ● BroadcastReciver chỉ có giá trị trong khi onReciver được gọi. Khi phương thức này kết thúc thì receiver kết thúc và không còn ở trạng thái active nữa. Lưu ý: ● ● ● Không thể gọi hàm bất đồng bộ bên trong onReceive vì hàm này sẽ không có điểm quay về khi receiver không còn tồn tại. Không nên show dialog mà nên dùng Notification bên trong onReceive. Không nên bind service mà nên dùng startService bên trong onReceive.
  • 12. Hạn chế của Broadcast Receiver ● ● BroadcastReciver phải kết thúc việc thực thi trong 10 giây nếu không thì nó sẽ trigger ANR exception. Từ Android 3.1, mặc định hệ thống sẽ loại bỏ tất cả các receiver từ các intent nếu như ứng dụng tương ứng với các receiver này chưa được start bởi người dùng bao giờ hoặc các ứng dụng này bị stop một cách tường minh bởi người dùng thông qua menu (Manage Application).
  • 13. Đăng ký Broadcast Receiver bằng code ● Ngoài phương pháp đăng ký receiver trong AndroidManifest.xml file chúng ta có thể đăng ký receiver bằng code: ● ● Trong onResume của Activity, chúng ta sử dụng Contex#registerReceiver (LocalBroadcastManager#registerReceiver). Trong onPause của Activity, chúng ta sử dụng: Context#unregisterReceiver (LocalBroadcastManager#unregisterReceiver).
  • 14. Disable receiver ● Để disable một receiver đã đăng ký trong manifest file chúng ta sử dụng PackageManger: ComponentName mReceiver = new ComponentName(context, SampleReceiver.class); PackageManager mManager = context.getPackageManager(); mManager.setComponentEnabledSetting(mReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
  • 15. Sticky Broadcast Intent ● ● ● Broadcast intent thông thường thì sẽ bị mất sau khi hệ thống xử lý xong. Nếu chúng ta sử dụng Context#sendStickyBroadcastIntent để gửi broadcast intent thì intent này nó không mất đi sau khi hệ thống xử lý. Chúng ta có thể truy xuất đến intent này bằng phương thức Context#registerReciver(BroadcastReceiver, IntentFilter), trong đó nếu BroadcastReceiver = null thì phương thức vẫn hoạt động. Ví dụ Intent.ACTION_BATTERY_CHANGED là một sticky broadcast intent. Chúng ta có thể truy xuất đến nó bất cứ lúc nào sau khi nó được gửi.
  • 16. Bài tập 06 ● Hiện thực chương trình mô tả như trong hình: Nhập vào số giây Nhấn nút “Start” Xem thêm các class sau: ● PendingIntent ● AlarmManager ● Vibrator 10 giây sau, điện thoại rung và 1 toast hiện ra thông điệp
  • 17. Nguyen Huu Phuoc, MEng. ●  Blog:http://folami.nghelong.com ●  Website http://phuocnh.nghelong.com
  • 18. Nguyen Huu Phuoc, MEng. ●  nhphuoc@vn.isb.co.jp ●  (84) 3.812.7145 Ext.118 ●  http://phuocnh.nghelong.com