Your SlideShare is downloading. ×
Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Android Nâng cao-Bài 5:Notification Multiresolution Multilanguage

1,051
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,051
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
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. 1 ANDROID NÂNG CAOANDROID NÂNG CAO Bài 5: NotificationNotification Multi-ResolutionMulti-Resolution Multi-LanguageMulti-Language
  • 2. 2 Nội dung bài học ● Notification. ● Muilti-Resolution. ● Multi-Language.
  • 3. 3 Nội dung bài học ● Notification. ● Muilti-Resolution. ● Multi-Language.
  • 4. 4 Notification ● Giới thiệu về Notification. ● Hiện thực Notification. ● Notification Queue. ● Cập nhật Notification. ● Xoá Notification. ● Rung điện thoại khi notify . ● Chớp đèn khi notify. ● Phát âm thanh khi notify. ● Customize notification. ● Best practices.
  • 5. 5 Giới thiệu về Notification ● Notification là một cơ chế cho phép tại một thời điểm nhất định trình bày một thông tin trên thanh trạng thái (status bar) ở phía trên màn hình. ● Mỗi khi thanh trạng thái được mở ra thì một danh sách những notification được hiển thị, khi người dùng click vào một notification thì có thể một Activity được kích hoạt.
  • 6. 6 Giới thiệu về Notification ● Một Nofication thông thường gồm các thành phần sau đây: (1) Một icon (xuất hiện trên status bar và ở nội dung chi tiết của notification) (2) Ticker text (xuất hiện trên status bar). (3) Notification title text (xuất hiện ở nội dung chi tiết). (4) Notification body text (xuất hiện ở nội dung chi tiết). (5) Một intent (launch Activity khi user click vào nội dung chi tiết). (1) (2) (3)(4)
  • 7. 7 Hiện thực Notification 1.Get NotificationManager 2.Tạo đối tượng Notification. 3.Tạo PendingIntent. 4.Thêm thông tin về Notification event. 5.Trình bày notification.
  • 8. 8 Hiện thực Notification 1.Get NotificationManager: Tất cả các Notification được tạo ra nhờ lớp NotificationManager (package android.app). Để có được đối tượng NotificationManager ta thực hiện như sau:
  • 9. 9 Hiện thực Notification 2.Tạo đối tượng Notification: ● Cách cũ: Sử dụng constructor của lớp Notification, resource id của icon, ticker text, thời gian (ms). ● Cách mới: Sử dụng Notification.Builder Notification notification = new Notification.Builder(mContext) .setTicker("Ticker Text”) .setSmallIcon(R.drawable.icon) .setWhen(System.currentTimeMilis()) .build();
  • 10. 10 Hiện thực Notification 3.Tạo PendingIntent: Khi người dùng click vào nội dung chi tiết của notification trong danh sách thì intent này được xử lý ● PendingIntent.getActivity có 4 tham số: ● Tham số 1: Context. ● Tham số 2: Request code, không dùng và thường là 0. ● Tham số 3: Intent cần xử lý. ● Tham số 4: Intent flag (Xem thêm ở PendingIntent), nếu không dùng thì truyền 0.
  • 11. 11 Hiện thực Notification 4.Thêm thông tin về Notification event: Cách cũ: ● Sử dụng phương thức Notification#setLatestEventInfo để thêm các thông tin về notification event. ● Phương thức có 4 tham số: ● Tham số 1: Context. ● Tham số 2: Notification title text. ● Tham số 3: Notification body text. ● Tham số 4: PendingIntent.
  • 12. 12 Hiện thực Notification 4.Thêm thông tin về Notification event: Cách mới: ● Sử dụng phương thức Notification.Builder để build Notification ở bước 2 và set các tham số cần thiết. Tức là bước 2 và bước 4 gộp lại thành 1 bước và thực hiện sau bước 3. Notification notification = new Notification.Builder(mContext) .setTicker("Ticker Text”) .setContentTitle(“Title text) .setContentText(“Body text”) .setContentIntent(pendingIntent) .setSmallIcon(R.drawable.icon) .setWhen(System.currentTimeMillis()) .build();
  • 13. 13 Hiện thực Notification 5.Trình bày notification: ● Sử dụng phương thức NotificationManager#notify để trình bày notification. ● Phương thức có 2 tham số: ● Tham số 1: The notification id. ● Tham số 2: Notification object.
  • 14. 14 Notification Queue ● Khi chúng ta gọi phương thức NotificationManager#notify thì hệ thống sẽ tìm trong queue xem có notification nào có cùng id hay không. ● Nếu có thì notification cũ được cập nhật. ● Nếu không thì notification mới được tạo ra. ● Notification id chỉ cần duy nhất trong 1 ứng dụng.
  • 15. 15 Cập nhật Notification ● Sử dụng phương thức NotificationManager#notify với id cùng với id của notification mà chúng ta muốn cập nhật. ● Việc cập nhật notification giúp cho danh sách notification không chứa quá nhiều notification, khó quản lý.
  • 16. 16 Xoá Notification ● Sau khi pending intent được kích hoạt, thường chúng ta cần xoá notification khỏi danh sách. Sử dụng phương thức NotificationManager#cancel với tham số là notification id. ● Nếu chúng ta muốn hệ thống tự động xoá notification khỏi notification queue khi pending intent được kích hoạt, sử dụng notification flag Notification.FLAG_AUTO_CANCEL notification |= Notification.FLAG_AUTO_CANCEL
  • 17. 17 Rung điện thoại khi notify ● Để gây chú ý cho người dùng khi ở môi trường ồn ào mà không thể dùng âm thanh để cảnh báo thì rung điện thoại là phương pháp phù hợp nhất. ● Để rung điện thoại khi notify: ● Set quyền trong AndroidManifest.xml: <uses-permission android:name="android.permission.VIBRATE" /> ● Set vibrate pattern: notification.vibrate = new long[] {0, 200, 200, 600, 600}; ● Set notification flag để giữ lại cho đến khi nào người dùng click vào thông tin chi tiết của notification: notification.flags |= Notification.FLAG_INSISTENT;
  • 18. 18 Chớp đèn khi notify ● Chớp đèn khi notify là cách gây chú ý cho người dùng một cách yên lặng nhất. ● Để chớp đèn khi notify: ● Set notification flag: notification.flags |= Notification.FLAG_SHOW_LIGHTS; ● Set màu của đèn, thời gian (ms) đèn sáng và thời gian (ms) đèn tắt: notification.ledARGB = Color.GREEN; notification.ledOnMS = 1000; notification.ledOffMS = 1000; ● Màu đèn là màu bất kỳ tuy nhiên tuỳ theo phần cứng mà màu thực tế đôi khi không giống màu mong đợi
  • 19. 19 Chớp đèn khi notify ● Đèn sẽ chớp đến khi nào người dùng xoá notification khỏi notification queue. Do đó Notification.FLAG_INSISTENT là không cần thiết ở đây.
  • 20. 20 Phát âm thanh khi notify ● Không có gì có thể thu hút sự chú ý của người dùng bằng phương pháp phát đoạn nhạc hay âm thanh. ● Để phát âm thanh khi notify chúng ta thực hiện như sau: ● Cấu hình audio stream type: notification.audioStreamType = AudioManager.STREAM_NOTIFICATION; ● Chỉ ra tập tin âm thanh cần phát: notification.sound = Uri.parse("android.resource://com.example.samplenotificatio n/" +R.raw.samplesound); ● Âm thanh chỉ phát một lần, muốn lặp lại thì cần bật cờ: notification.flags |=Notification.FLAG_INSISTENT
  • 21. 21 Customize Notification ● Customize Notification thông qua RemoteViews ● Bước này đã thay setLatestEventInfo, để set PendingIntent cho notification chúng ta dùng: notification.contentIntent = pendingIntent;
  • 22. 22 Best Practices ● Sử dụng notification khi chương trình không ở foreground ngược lại nên dùng Toast, Dialog. ● Cho phép người dùng chọn lựa loại notification (văn bản, âm thanh, chớp đèn, rung), tần suất notification, sự kiện kích hoạt notification. ● Nếu được nên sử dụng notification đã có thay vì tạo mới. ● Xoá notification khi có thể. ● Khi không xác định được nên sử dụng polite notification. ● Notification chứa thông tin hữu ích trong ticker text, title text, body text.
  • 23. 23 Bài tập 08 Viết lại bài tập 07 không dùng Toast để thông báo mà sử dụng Notification.
  • 24. 24 Multi-Resolution ● Density& Screen Size ● DIP ● Scaling ● Tips
  • 25. 25 Density & Screen Size ● Các thiết bị Android được phân loại dựa vào density và screen size (kích thước màn hình, tính bằng inch) ● Density được đo bằng đơn vị DPI (dot per inch, số lượng điểm ảnh trên 1 inch chiều dài). Dựa vào density người ta chia thiết bị Android thành 4 loại như bảng bên dưới. ● Ứng với mỗi loại density thì Android cung cấp một thư mục để tải ảnh phù hợp với density đó. ● Thư mục res/drawable-nodpi dùng để lưu các ảnh không phụ thuộc vào density, nó được dùng cho tất cả các loại density Loại DPI DPI chuẩn Thư mục hình ảnh Low Density (ldpi) 100-140 120 res/drawable-ldpi Medium Density (mdpi) 140-180 160 res/drawable-mdpi High Density (hdpi) 190-250 240 res/drawable-hdpi Extra High Desnsity (xhdpi) > 250 320 res/drawable-xhdpi (1.33mdpi) 180-190 res/drawable-tvdpi
  • 26. 26 Density & Screen Size ● Dựa vào kích thước màn hình người ta cũng chia thiết bị Android thành 4 loại ● Đối với mỗi loại kích thước màn hình Android cung cấp một thư mục chứa các layout tương ứng cho loại màn hình đó. ● Thư mục res/drawable-nodpi dùng để lưu các ảnh không phụ thuộc vào density, nó được dùng cho tất cả các loại density Loại Kích thước Thư mục layout Small Screen < 3'' res/layout-small Normal Screen 3'' – 4'' res/layout Large Screen 4'' – 7'' res/layout-large Extra Large Screen 7'' – 10'' res/drawable-xlarge
  • 27. 27 DIP ● Thông thường khi đo kích thước người ta dùng đơn vị px(pixel,điểm ảnh). Tuy nhiên đơn vị này lại phụ thuộc vào density. ● Để khắc phục điểm này, Android đưa ra khái niệm DIP (density independent pixel). Đơn vị của DIP là dip hay dp. ● Công thức quy đổi: pixels = dips *density/160. ● Scale-independent pixel (sp) là một khái niệm tương tự như DIP nhưng bên cạnh không phụ thuộc vào density thì nó còn không phụ thuộc vào font size của người dùng. 1sp = 1dp. ● Lưu ý vì Java không có hai khái niệm này do đó khi dùng Java trong chương trình Anhdroid cần chuyển đổi 2 đơn vị này như công thức trên.
  • 28. 28 Một số size qualifier mới Cấu hình Qualifier Layout directory smallestWidth sw<N>dp res/layout-sw<N>dp Available screen width w<N>dp res/layout-w<N>dp Available screen height h<N>dp res/layout-h<N>dp ● Hỗ trợ từ Android 3.2+ ● Xem thêm các cấu hình sau: ● android:requiresSmallestWidthDp ● android:compatibleWidthLimitDp ● android:largestWidthLimitDp
  • 29. 29 Scaling ● Nếu hình ảnh trong thư mục tương ứng với loại density không tìm thấy mà tìm thấy trong thư mục res/drawable. Thì hình ảnh này sẽ bị scaling theo tỉ lệ như sau: ● Low density = 0.75 ● Medium density = 1 ● High density = 1.5 ● Extra high density = 2.0 xhdpi(2.0x) hdpi(1.5x) mdpi(baseline) ldpi(0.75x)
  • 30. 30 Tips ● Sử dụng “wrap-content”, “fill-parent” (or “match-parent” từ Android 2.2+) để chỉ định kích thước của layout. Trong trường hợp cần đưa con số cụ thể dùng đơn vị “dp” cho độ dài và “sp” cho font size. ● Chuẩn bị ảnh phù hợp cho các loại density. ● Chuẩn bị layout phù hợp cho các loại screen size. ● Không dùng AbsoluteLayout → RelativeLayout. ● Chuyển đổi dp, sp sang px dùng công thức chứ không hardcode trong Java. ● Test sử dụng emulator sử dụng bảng bên dưới
  • 31. 31 Multi-Languge ● Sử dụng cấu hình ngôn ngữ của thiết bị, resource files đặt trong thư mục tương ứng res/values-[mã ngôn ngữ] hoặc res/values-[mã ngôn ngữ]-r[mã vùng] ● Nếu các thư mục trên không tồn tại thì thư mục res/values được sử dụng.
  • 32. 32 Bài tập 09 Tìm hiểu và viết chương trình demo cho “force language” (thay đổi ngôn ngữ chương trình từ chọn lựa ngôn ngữ của người dùng mà không phụ thuộc vào cấu hình của thiết bị).
  • 33. Nguyen Huu Phuoc, MEng. ●  Blog:http://folami.nghelong.com ●  Website http://phuocnh.nghelong.com