Beginning Android for Application - Chapter 2: Activities, Fragments, Intents

Trong chương 2 bạn sẽ được tìm hiểu về:

- Vòng đời của activity

- Sử dụng fragment để customize (tùy biến) UI

- Sử dụng theme và style cho activities

- Làm cách nào để hiển thị activities như là một dialog windows

- Tìm hiểu định nghĩa về intents

- Sử dụng intent object để link activities

- Intent filter giúp bạn lựa chọn kết nối với các activities khác như thế nào

- Hiển thị alert để thông báo cho người dùng.

pdf73 trang | Chuyên mục: Android | Chia sẻ: dkS00TYs | Lượt xem: 2357 | Lượt tải: 1download
Tóm tắt nội dung Beginning Android for Application - Chapter 2: Activities, Fragments, Intents, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 gì được tác động ví dụ như một người trong Contacts database. Data được xác định 
như một URI object. 
Một vài những action thường gặp là: 
Một vài những data thường gặp là: 
Thangit14.blogspot.com Thangit14@gmail.com 
57 
Chú ý: Phần “Using intent filters” sẽ giải thích các kiểu data mà bạn có thể định 
nghĩa để sử dụng trong một activity. 
Nhìn chung, cặp action và data mô tả cách mà hệ điều hành hoạt động. Ví dụ, để 
gọi một số, bạn cần sử dụng cặp ACTION_DIAL/tel:+651234567. Để hiển thị list danh 
bạn đc lưu trữ trong điện thoại, bạn sử dụng cặp ACTION_VIEW/content://contacts. Để 
lấy một contact từ danh bạn, bạn sử dụng cặp ACTION_PICK/content://contacts. 
Ở button đầu tiên, bạn tạo một Intent object và sau đó truyền 2 tham số vào 
constructor: 
Hằng số android.content.Intent.ACTION_VIEW thực chất tham chiếu đến action 
:”android.intent.action.view”, vì thế dòng lệnh trên có thể được viết như sau: 
Hoặc có thể viết tách ra: 
Ở đây, bạn set data sử dụng phương thức setData(). 
Ở button thứ 2, bạn gọi đến một số điện thoại bằng việc truyền số điện thoại vào 
data: 
Trong trường hợp này, dialer sẽ hiển thị number được gọi. Người dùng phải ấn 
vào dial button để gọi. Nếu bạn muốn thực hiện cuộc gọi trực tiếp mà không cần tương 
tác với người dùng thì dòng lệnh như sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
58 
Chú ý: Nếu bạn muốn ứng dụng thực hiện một cuộc gọi đến một số xác định, bạn 
cần thêm android.permission.CALL_PHONE permision vào ứng dụng của bạn. 
Để hiển thị dialer mà không cần chỉ ra số cần gọi, cách đơn giản là bạn chỉ cần bỏ 
qua phần data: 
Button thứ 3 hiển thị một map sử dụng ACTION_VIEW 
Thay vì sử dụng “http” bạn sử dụng cấu trúc “geo” 
Hiểu rõ về Intent Object. 
Giờ thì bạn đã biết cách sử dụng Intent Object để gọi activity khác. Bây giờ chính 
là thời điểm để tóm tắt và tìm hiểu kĩ hơn về cách mà Intent Object thực hiện. 
Đầu tiên, bạn đã học cách gọi một activity khác bằng cách truyền một action đến 
constructor của Intent object: 
Action (“net.learn2develop.SecondActivity”) được gọi như là component name. 
Nó được sử dụng để xác định activity/application mà bạn muốn gọi. Bạn cũng có thể 
dùng conponent name bằng cách chỉ ra class name của activity : 
Bạn cũng có thể tạo ra một Intent Object bằng cách truyền một action constain và 
data: 
Action xác định xem bạn muốn làm gì, trong khi data chứa data được gửi đến 
activity để nó có thể làm gì đó tiếp theo. Bạn có thể truyền data vào Intent object sử dụng 
setData() method: 
Thangit14.blogspot.com Thangit14@gmail.com 
59 
Trong ví dụ này, bạn muốn view một web page. Android OS sẽ tìm kiếm tất cả 
activities có thể thực hiện request của bạn. Chức năng này được biết như là intent 
resolution. Phần tiếp theo chúng ta sẽ thảo luận thêm về cách mà các activities của bạn có 
thể được gọi bởi các activities khác. 
Với một vài intent, không cần thiết phải đưa vào data. Ví dụ, để select một contact 
trên danh bạn, bạn xác định action và sau đó chỉ ra dạng của MIME sử dụng method 
setType(): 
Chú ý: Chương 7 sẽ thảo luận làm cách nào để sử dụng Contacts Application, 
Phương thức setType() chỉ ra rõ ràng kiểu dữ liệu của MIME để xác định kiểu data 
để trả về. MIME type cho ContactsContrac.Contacts.CONTENT_TYPE là 
“vnd.android.cursor/contact”. 
Bên cạnh việc chỉ ra action, data, type, một Intent object còn có thể xác định một 
category. Một category nhóm những activities thành một đơn vị logic để Android có thể 
sử dụng nó cho quá trình filtering tốt hơn. Chương tiếp theo sẽ tiếp tục thảo luận về 
categories. 
Tóm lại, một Intent object có thể bao gồm những thông tin sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
60 
Sử dụng Intent Filters. 
Phần trước, bạn đã thấy cách môt activity có thể gọi ra bởi một activity khác sử 
dụng Intent object. Để cho các activities khác có thể gọi activity của bạn, bạn cần chỉ ra 
action và category trong thẻ trong file AndroidManifest.xml 
Đây là một ví dụ đơn giản nhất, hãy xem xét những ví dụ khác, phức tạp hơn: 
Thangit14.blogspot.com Thangit14@gmail.com 
61 
Thangit14.blogspot.com Thangit14@gmail.com 
62 
Thangit14.blogspot.com Thangit14@gmail.com 
63 
Phân tích hoạt động: 
Trong ví dụ này, bán đã tạo ra một activity mới có tên MyBrowserActivity. Đầu 
tiên, bạn cần phải khai báo trong file AndroidManifest.xml 
Trong element, bạn khai báo nó với 2 action, one category, và một 
data. Điều này có nghĩa là tất cả các activities khác có thể gọi activity này sử dụng một 
trong 2 action: “android.intent.action.VIEW” hoặc “net.learn2develop.MyBrowser”. Với 
tất cả các activities mà bạn muốn gọi tới nó thì sử dụng phương thức startActivity() hoặc 
startActivityForResult(), và chúng cần phải có “android.intent.category.DEFAULT” 
category. Nếu không, activity của bạn sẽ không được gọi bởi các activity khác. Thẻ 
 xác định kiểu dữ liệu được nhận từ activity. Trong ví dụ này, data được bắt đầu 
với tiền tố http. 
Ta cũng có thể viết lại intent filter ở ví dụ này như sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
64 
Viết theo cách này sẽ dễ đọc hơn nhiều, và nhóm được các 
thành phần action, category, filter thành một intent filter. 
Nếu bây giờ bạn sử dụng ACTION_VIEW action, 
Android sẽ hiển thị lựa chọn như Figure 2-27 
Bạn có thể chọn sử dụng Browser Application hay Intents 
Application mà bạn đã viết code. 
Chú ý rằng khi nhiều activities được match vào Intent 
object giống như trường hợp này, dialog titled “Complete action 
using” sẽ xuất hiện. Bạn có thể thay đổi nó bằng cách sử dụng 
phương thức createChooser() : 
Điều này sẽ làm xuất hiện như Figure 2-28. Để í rằng lựa chọn “Use by default for 
this action” sẽ không xuất hiện. 
Tính năng tích cực khác của việc sử dụng createChooser() là trong trường hợp mà 
không có activity nào match với Intent object thì ứng dụng của bạn sẽ không bị crash. Nó 
sẽ hiển thị ra một message như Figure 2-29: 
Thangit14.blogspot.com Thangit14@gmail.com 
65 
Adding Categories. 
Bạn có thể nhóm activities vào những categories bằng cách sử dụng 
element trong intent filter. Bạn thêm element vào file AndroidManifest.xml 
như sau: 
Thangit14.blogspot.com Thangit14@gmail.com 
66 
Sau đó, bạn thêm dòng code sau để gọi trực tiếp MyBrowserActivity: 
Bạn đã thêm một category vào Intent object sử dụng method addCategory(). Nếu 
bạn không làm việc này, activity MyBrowserActivity vẫn sẽ được gọi và nó sẽ match với 
default category: android.intent.actegoty.DEFAULT. 
Tuy nhiên, nếu bạn chỉ ra một category không match với category được định nghĩa 
trong intent filter, thì activity đó sẽ không được chạy. 
Như bạn thấy, category “net.learn2develop.OtherApps” không match với bất cì 
category nào trong intent filter, vì thế một run-time exception sẽ được ném ra( Nếu bạn 
không sử dụng createChooser() method của Intent class). 
Để có thể chạy được bạn cần phải thêm intent filter như sau: 
Bạn có thể nhiều categories vào một Intent object; ví dụ: 
Thangit14.blogspot.com Thangit14@gmail.com 
67 
Bởi vì intent filter không định nghĩa net.learn3develop.SomeOtherApps category, 
nên đọan mã trên sẽ không phù hợp để gọi ra MyBrowserActivity activity. Để chạy được, 
bạn cần thêm net.learn2develop.SomeOtherApps category vào intent filter. 
Từ ví dụ này, ta thấy rằng khi sử dụng Intent object với categories, tất cả 
categories được thêm vào Intent object phải được định nghĩa trong intent filter. 
Hiển thị Notifications. 
Cho đến hiện giờ thì chúng ra vẫn đang sử dụng Toast class để hiển thị một 
message đến người dùng. Toast class là một cách tiện dụng để hiển thị thông báo cho 
người dùng, nhưng nó không liên tục. Nó sáng trên màn hình vài giây và sau đó biến mất. 
Nếu nó chứa thông tin quan trọng, người dùng có thể sẽ không nhìn thấy nó. 
Để hiển thị một message quan trọng, bạn nên sử dụng những phương thức liên tục 
(presistent method). NotificationManager được dùng để hiển thị một persistent message, 
được gọi là status bar (cũng có thể gọi là notification bar), 
Thangit14.blogspot.com Thangit14@gmail.com 
68 
Thangit14.blogspot.com Thangit14@gmail.com 
69 
Thangit14.blogspot.com Thangit14@gmail.com 
70 
Phân tích hoạt động: 
Để hiển thị một motification, đầu tiên, bạn tạo một Intent object để chỉ đến 
Notificaiont class. 
Thangit14.blogspot.com Thangit14@gmail.com 
71 
Intent này được sử dụng để gọi ra một activity khác khi người dùng chọn một 
notificaion từ list hiển thị trên màn hình. Ở đây, bạn đã thêm một cặp name/value vào 
Intent object vì thế bạn có thể nhận dạng notification ID, xác định notification được gửi 
đến activity nào. ID này sẽ được sử dụng để dismiss notification sau này. 
Bạn có thể cần tạo ra một PendingIntent object. Một PendingIntent object giúp bạn 
thực hiện một action thay cho ứng dụng của bạn, thường vào thời điểm cuối cùng, bất kể 
ứng dụng của bạn có đang chạy hay không. 
Phương thức getActivity() lấy về một PendingIntent object và cần phải truyền vào 
các tham số sau: 
Sau đó tạo ra instance của NotificationManager và Notification class. 
Notificaion cho phép bạn chỉ ra notification 
Sau đó bạn mô tả chi tiết về notificaion sử dụng setLatestEventInfo(): 
Thangit14.blogspot.com Thangit14@gmail.com 
72 
Cuối cùng, ta hiển thị notification bằng phương thức notify(): 
Khi người dùng clicks trên notification, thì NotificationView activity sẽ được khởi 
chạy. Ở đây, bạn sẽ dismiss notification sử dụng cancel() method và truyền vào đó ID của 
notification ( được truyền vào thông qua Intent object). 
Tổng kết: Trong chương này chúng ta đã tìm hiểu về các activities và fragments 
hoạt động ra sao. Bạn cũng được tìm hiểu về cách hiển thị dialog window sử dụng 
activities. 
Phần thứ 2 của chương đã giải thích một định nghĩa rất quan trọng trong Android: 
Intent. Intent chính là ‘glue’ (chất kết dính, gắn kết), cho pheps cacs activities khác có thể 
tiếp tục. 
Thangit14.blogspot.com Thangit14@gmail.com 
73 

File đính kèm:

  • pdfBeginning Android for Application - Chapter 2 Activities, Fragments, Intents.pdf