Công nghệ mới trong
phát triển hệ thống thông tin
Chuyên đề: Phát triển ứng dụng
trên môi trường Android
Bài 6: Intent, Broadcast Receiver, Service
TS. Trần Minh Triết
Khoa Công nghệ Thông tin
Trường ĐH Khoa học Tự nhiên
Tham khảo
Nội dung của bài giảng có sử dụng:
Tài liệu, bài giảng của ThS. Nguyễn Trung Hiếu, Trung tâm Tin học trường ĐH Khoa học Tự
nhiên, ĐHQG-HCM
Tài liệu, bài giảng của ThS. Bùi Tấn Lộc, Khoa Công nghệ Thông tin, trường ĐH Khoa học Tự
nhiên, ĐHQG-HCM
Website:
2
Nội Dung
Intent
Broadcast Receiver
Service
3
Intents
Intents:
được sử dụng như một kĩ thuật để truyền thông điệp trong một ứng dụng hay giữa các ứng
dụng.
Intents có khả năng:
Kích hoạt một activity hay service
Khai báo việc thực hiện một chức năng của activity hay service
Thông báo một event hay action xảy ra
4
Intents
Mục đích sử dụng Intent phổ biến:
Khởi động tường minh các activities bằng cách mô tả đối tượng thực hiện.
Khởi động ngầm định các activities bằng cách yêu cầu thực hiện chức năng của activities đó
trên dữ liệu cho trước.
Ngoài ra, Intent dùng để broadcast thông điệp
Ví dụ: thông báo trạng thái kết nối Internet, trạng thái pin, cuộc gọi đến, nhận tin nhắn…
5
Intents
Sử dụng phương thức startActivity() để chạy một Activity
startActivity(myIntent);
Tìm và khởi động activity như myIntent mô tả
startActivityForResult();
Khởi động một activity có khả năng trả về dữ liệu
6
Intents
Khởi động tường minh một Activity
Sau khi gọi hàm startActivity(), MyOtherActivity được tạo ra ở trạng thái visible và
active.
Gọi hàm finish() hay bấm nút back để đóng Activity mới.
7
Intent intent = new Intent(MyActivity.this, MyOtherActivity.class);
startActivity(intent);
Intents
Khởi động ngầm định một Activity
Ví dụ: cho phép người dùng gọi điện thoại từ ứng dụng của họ bằng cách yêu cầu
ACTION_DIAL với số điện thoại trong URI
8
if (muốn gọi điện thoại) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-2368"));
startActivity(intent);
}
Intents
Khởi động tường minh sub-activity trả về dữ liệu
Request code:
Dùng để xác nhận sub-activity trả về kết quả
Ví dụ: SHOW_SUBACTIVITY
9
private static final int SHOW_SUBACTIVITY = 1;
Intent intent = new Intent( this, MyOtherActivity.class);
startActivityForResult(intent, SHOW_SUBACTIVITY);
Intents
Khởi động ngầm định sub-activity
Action: ACTION_PICK
Request code: PICK_CONTACT_SUBACTIVITY
10
private static final int PICK_CONTACT_SUBACTIVITY = 2;
Uri uri = Uri.parse("content://contacts/people");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);
Intents
setResult() được gọi trước finish() để trả về kết quả cho Activity chính.
setResult() cần hai tham số:
Mã kết quả (result code)
Dữ liệu (result)
Mã kết quả:
Activity.RESULT_OK hay
Activity.RESULT_CANCELED
Kết quả là một intent chứa dữ liệu trả về
11
Intents
Ví dụ: RESULT_OK
12
Button okButton = (Button) findViewById(R.id.ok_button);
okButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Uri data = Uri.parse("content://horses/" + selected_horse_id);
Intent result = new Intent(null, data);
result.putExtra(IS_INPUT_CORRECT, inputCorrect);
result.putExtra(SELECTED_PISTOL, selectedPistol);
setResult(RESULT_OK, result);
finish();
}
});
Intents
Ví dụ: RESULT_CANCEL
13
Button cancelButton = (Button) findViewById(R.id.cancel_button);
cancelButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
setResult(RESULT_CANCELED, null);
finish();
}
});
Intents
Xử lý các kết quả của sub-activity
Khi sub-activity kết thúc, hàm onActivityResult() được gọi trong lớp Activity chính
onActivityResult() handler
request code
result code
data
14
Intents
15
Intents
Actions trong Android
ACTION_ANSWER, ACTION_CALL, ACTION_DIAL
ACTION_DELETE, ACTION_INSERT, ACTION_EDIT
ACTION_PICK
ACTION_SEARCH
ACTION_SENDTO
ACTION_SEND
ACTION_VIEW
ACTION_WEB_SEARCH
16
Intents
Sử dụng Intent Filter
action android:name
category android:name
ALTERNATIVE
SELECTED_ALTERNATIVE
BROWSABLE
DEFAULT
GADGET
HOME
LAUNCHER
17
Intents
Sử dụng Intent Filter
data
android:host
android:mimetype
android:path
android:port
android:scheme
18
Intents
Ví dụ Intent Filter
19
Intents
20
Thực hành : Contact Picker
Nội Dung
Intent
Broadcast Receiver
Service
21
Broadcast Receiver
Sử dụng Broadcast Intent để gửi thông điệp giữa các ứng dụng
Android sử dụng broadcast intent để broadcast các event hệ thống
Battery-charging levels
Network connections
Incoming calls
Broadcast Receiver được thiết kế để nhận các broadcast intent
22
Broadcast Receiver
Cách thức gửi Broadcast Intent
Tạo một intent
Intent intent =new Intent("com.hieu.copyToApp");
Gọi hàm sendBroadcast() của Activity
sendBroadcast(intent);
Có hai dạng broadcast được nhận
Normal broadcast
được gửi bởi sendBroadcast()
Ordered broadcast
được gửi bởi sendOrderedBroadcast()
23
Broadcast Receiver
BroadcastReceiver được dùng để nhận các broadcast intents
Để sử dụng BroadcastReceiver, chương trình phải đăng kí trong file manifest hay
trong mã nguồn
Broadcast Receiver mới được kế thừa từ class BroadcastReceiver và override hàm
onReceive()
24
Broadcast Receiver
Mẫu hiện thực Broadcast Receiver
onReceiver() handler phải hoàn tất trong 5s nên broadcast receiver chỉ dùng để cập
nhật GUI, khởi động Service hay thông báo người dùng bởi Notification Manager
25