Chuyên đề: Phát triển ứng dụng trên môi trường Android Bài 6: Intent, Broadcast Receiver, Service TS.. đượ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á
Trang 1Chuyê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
Trang 2 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: http://developer.android.com/
Trang 3 Broadcast Receiver
Service
Trang 4 đượ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
Trang 5 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…
Trang 7 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.
Intent intent = new Intent ( MyActivity.this , MyOtherActivity.class );
Trang 8 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
if (muốn gọi điện thoại) {
Intent intent = new Intent ( Intent.ACTION_DIAL , Uri.parse("tel:555-2368" ));
}
Trang 9 Request code:
Dùng để xác nhận sub-activity trả về kết quả
Ví dụ: SHOW_SUBACTIVITY
private static final int SHOW_SUBACTIVITY = 1;
Intent intent = new Intent ( this , MyOtherActivity.class );
Trang 10 Action: ACTION_PICK
Request code: PICK_CONTACT_SUBACTIVITY
private static final int PICK_CONTACT_SUBACTIVITY = 2;
Uri uri = Uri parse("content://contacts/people");
Intent intent = new Intent (Intent.ACTION_PICK, uri);
Trang 11 setResult() cần hai tham số:
Mã kết quả (result code)
Trang 12Button 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(I S_INPUT_CORRECT , inputCorrect);
result.putExtra( SELECTED_PISTOL , selectedPistol);
setResult( RESULT_OK , result);
finish();
}
});
Trang 13Button cancelButton = ( Button ) findViewById(R.id.cancel_button);
cancelButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
setResult( RESULT_CANCELED , null);
finish();
}
});
Trang 14 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
Trang 16 ACTION_ANSWER, ACTION_CALL, ACTION_DIAL
ACTION_DELETE, ACTION_INSERT, ACTION_EDIT
Trang 20Thực hành : Contact Picker
Trang 21 Broadcast Receiver
Service
Trang 22 Android sử dụng broadcast intent để broadcast các event hệ thống
Trang 23 Tạo một intent
Intent intent =new Intent("com.hieu.copyToApp");
Gọi hàm sendBroadcast() của Activity
Trang 24 Để 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()
Trang 25 onReceiver() handler phải hoàn tất trong 5s nên broadcast receiver chỉ dùng để cập
Trang 26 Broadcast chỉ hoạt động trong thời gian onReceive() được gọi, và khi kết thúc hàm này, thì broadcast đã hoàn thành và không còn hoạt động nữa.
Sự cấp quyền
Chỉ Broadcast receiver được cung cấp quyền mới có thể nhận những intent gửi đi
Trang 27 Broadcast Receiver
Service
Trang 28không có giao diện như Activity
Các thành phần ứng dụng khác như Activity, Broadcast Receiver có thể thực thi và điều khiển Service
Service cho phép một thành phần khác kết nối tương tác với nó hay thực hiện IPC (interprocess communication)
Trang 30 “Started” Service:
Service được gọi khi thành phần của ứng dụng gọi nó bằng phương thức startService(), và service
sẽ chạy vô thời hạn.
Thực hiện công việc đơn lẻ như download, tính toán và service sẽ dừng một khi công việc hoàn
thành.
“Bound” Service:
Service được gọi khi thành phần của ứng dụng gọi nó bằng phương thức bindService()
Cung cấp giao diện Client–Server cho phép thành phần ứng dụng tương tác với nó, gửi yêu cầu, lấy
kết quả.
Trang 31 IntentService: Lớp con của Service, là cách tốt nhất nếu không đòi hỏi Service
handle nhiều yêu cầu đồng thời
Trang 33 startService()
stopService()
stopSelf()