Phát triển ứng dụng trên thiết bị di động Ths Lương Trần Hy Hiến Khoa Công Nghệ Thông Tin Trường Đại học Sư phạm TP HCM Slide bài giảng được soạn từ nhiều nguồn Bài giảng (bao gồm cả ví dụ) của các[.]
Ths Lương Trần Hy Hiến Khoa Công Nghệ Thông Tin Trường Đại học Sư phạm TP.HCM Slide giảng soạn từ nhiều nguồn: Bài giảng (bao gồm ví dụ) giảng viên nước quốc tế https://developer.android.com/training/index.html https://developers.google.com/training/android/ Các khóa học Thiết kế ứng dụng Di động, Lập trình Di động Udemy, Udacity, … Khái niệm Intent Cơ chế hoạt động Các dạng Intent Xây dựng Intent Truy xuất Intent Gửi Phản hồi Intent Activity Intent Filter Custom ListView Menu Intent sử dụng để truyền tải thông điệp, yêu cầu hành động xử lý từ thành phần gọi Intent sử dụng ba trường hợp chính: Khởi động Activity thông qua phương thức startActivity Khởi động Service thông qua phương thức startService Chuyển thông điệp đến BroadcastReceiver thông qua phương thức sendBroadcast Intent chia làm hai dạng: Explicit Intent: định rõ thành phần xử lý thông qua tên lớp, thường dùng để gọi đến thành phần ứng dụng Implicit Intent: không định rõ thành phần xử lý, thay vào bổ sung thuộc tính như: mô tả hành động, dạng liệu… Đối tượng Intent khởi động thành phần ứng dụng đồng thời mang thông tin liệu xử lý, bao gồm thành phần sau: Component: tên thành phần nhận xử lý Intent Action: hành động yêu cầu thực thi Data: liệu yêu cầu nhận xử lý Category: mô tả lĩnh vực hoạt động Extras: key/value cho phép gửi nhận thông tin Flag: biến cờ mô tả cách thức hoạt động Explicit Intent: cần sử dụng thuộc tính Component Khai báo: Intent intent = new Intent(this, ); Ví dụ: khởi động Activity có tên SecondActivity từ MainActivity Intent intent = new Intent(MainActivty.this, SecondActivity.class); startActivity(intent); Implicit Intent: cần sử dụng thuộc tính Action Khai báo: Intent intent = new Intent(); Ví dụ: khởi động Activity thực ACTION_VIEW Intent intent = new Intent(Intent.ACTION_VIEW); startActivity(intent); Action: số Action thường dùng Intent ACTION_VIEW ACTION_DIAL ACTION_CALL ACTION_EDIT ACTION_DELETE ACTION_SEND ACTION_SENDTO Data: dạng đường dẫn URI, cho phép trỏ đến bảng liệu truy xuất thông tin bao gồm: type scheme + authority + path Data định thơng qua ba phương thức: setData setType setDataAndType Ví dụ: thực gọi thơng qua liệu số điện thoại Intent callPhone = new Intent(Intent.ACTION_CALL); callPhone.setData(Uri.parse(“tel:01234-56789”)); startActivity(callPhone); 10 Tạo Option Menu từ XML: 39 Tham chiếu Java code qua hàm onCreateOptionMenu(): 40 Xử lý kiện chọn OptionMenu: 41 Context Menu: Dạng menu xuất người dùng tương tác với Item ViewGroup, thường ListView GridView Bao gồm dạng: ▪ Floating Context Menu: dạng menu hiển thị người dùng nhấn giữ item ViewGroup (giống Dialog) ▪ Contextual Action Mode (API level 11): cơng cụ hiển thị phía ứng dụng cho phép người thực nhiều thao tác khác Item lựa chọn, thực thao tác nhiều Item ứng dụng có hổ trợ 42 Context Menu: 43 Khởi tạo Floating Context Menu ● Đăng ký đối tượng View sử dụng phương thức registerForcontextMenu(View) ● Thực override phương thức onCreateContextMenu() 44 Xử lý kiện Floating Context Menu cách override phương thức onContextItemSelected() 45 Dạng menu hiển thị người dùng nhấn giữ lâu đối tượng 46 Thực khởi tạo Popup Menu cho đối tượng: Ví dụ gọi phương thức onClick từ Button 47 Thực khởi tạo Popup Menu cho đối tượng: Xử lý phương thức showPopup public void showPopup(View v) { PopupMenu popup = new PopupMenu(this, v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.actions, popup.getMenu()); popup.show(); } 48 Xử lý kiện chọn Popup Menu: @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.archive: archive(item); return true; case R.id.delete: delete(item); return true; default: return false; } } 49 Các dạng Menu hỗ trợ người đưa lựa chọn: 50 Khai báo chế độ chọn cho Item XML: 51 Xử lý kiện chọn Menu: @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.vibrate: case R.id.dont_vibrate: if (item.isChecked()) item.setChecked(false); else item.setChecked(true); return true; default: return super.onOptionsItemSelected(item); } } 52 53