Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
1,9 MB
Nội dung
Phát triển ứng dụng Smartphone Tài liệu lưu hành nội Đây tài liệu tham khảo sử dụng mơn học Lập trình ứng dụng Smartphone – Android tổng hợp, biên soạn từ nhiều nguồn thành viên Nhóm nghiên cứu ứng dụng cơng nghệ A106-Đại học Hoa Sen Nhóm A106-http://profiles.hoasen.edu.vn/groups/584/ Phát triển ứng dụng Smartphone – Android Phát triển ứng dụng Smartphone Phần 01: Làm quen với Android Lê Đức Huy Email: leduchuy89vn@gmail.com Phát triển ứng dụng Smartphone – Android Mục lục Tổng quan Android 1.1 Các thành phần ứng dụng Application 1.1.1 Activity 1.1.2 Service 1.1.3 Content provider 1.1.4 Broadcast receiver 1.2 Hello Android 2.1 AndroidManifest.xml Phân tích ứng dụng “Hello Android” 13 Activity 18 Vòng đời Activity 19 Cơ chế sử lý kiện Android 22 Intent 26 Intent gì? 26 5.1 Intent chứa liệu ? 27 Tự định nghĩa action 29 Intent có 02 dạng 30 Intent Filter 30 Luật xác định thành phần phù hợp Intent 31 5.2 Sử dụng Intent nào? 32 5.2.1 Intent tường minh thực thi Activity 32 5.2.2 Intent không tường minh thực thi Activity 32 5.2.3 Truyền nhận thông tin Activity sử dụng đối tượng intent 33 Phát triển ứng dụng Smartphone – Android Phát triển ứng dụng Smartphone – Android Tổng quan Android Ứng dụng Android viết ngôn ngữ Java Bộ công cụ Android SDK biên dịch mã lệnh với liệu tài nguyên(hình ảnh, âm thanh) kèm với ứng dụng tạo thành gói có phần mở rộng apk (Viết tắt từ Android package) Tất phần mã thực thi kèm với tài nguyên (resources) nén tệp đơn có apk xem ứng dụng chạy thiết bị chạy Android File nén dùng để cài đặt thực thi Khi cài đặt vào thiết bị, ứng dụng Android “sống” “hộp cát bảo mật” Trong đó: o Hệ điều hành Android xem hệ thống Linux đa người dùng Nơi mà ứng dụng xem người dùng o Mặc định, hệ thống cấp phát cho ứng dụng định danh (User ID-Unique Linux user ID), định danh sử dụng hệ điều hành ứng dụng không hay biết định danh Hệ thống gán quyền cho tệp tin ứng dụng để User ID gán cho ứng dụng truy cập chúng o Mỗi tiến trình tảng Android có máy ảo (Virtual machine) riêng nó, cách câu mã lệnh ứng dụng thực thi cách độc lập với ứng dụng khác o Mặc định, ứng dụng chạy tiến trình riêng Android khởi động tiến trình mà thành phần ứng dụng cần thực thi sau tắt tiến trình mà khơng cần dùng thêm hệ thống cần nhớ cho ứng dụng khác Bằng cách Android thực “nguyên tắc đặc quyền tối thiểu” Đó là, theo mặc định, ứng dụng truy cập đến thành phần mà cần phải sử dụng để làm việc khơng thêm khác Điều tạo mơi trường bảo mật, nơi đảm bảo ứng dụng truy xuất phần khác hệ thống khơng quyền Điều khơng có nghĩa ứng dụng hoàn toàn độc lập với ứng dụng khác với hệ điều hành Có nhiều cách để ứng dụng chia sẻ liệu với ứng dụng khác để truy xuất dịch vụ hệ điều hành(contact, phone, sms, email…) như: o Nếu hai ứng dụng truy xuất nguồn tài nguyên cho hai ứng dụng nhận User ID Để tiết kiệm nguồn tài nguyên ứng dụng có User ID thực thi tiến trình máy ảo o Một ứng dụng yêu cầu quyền truy xuất liệu thiết bị contact, sms, SD card, camera, Bluetooth… Mọi quyền sử dụng ứng dụng cụ thể phải gán ứng dụng cài đặt lên thiết bị (Android thông báo quyền(Truy cập Internet, contact, sms…) mà ứng dụng cần sử dụng để hỏi người dùng có đồng ý cho phép cài đặt hay không) Phát triển ứng dụng Smartphone – Android Phần cung cấp cho người đọc số khái niệm thành phần ứng dụng Android 1.1 Các thành phần ứng dụng Application Cách thành phần ứng dụng Android khối thiết yếu dùng để ghép thành ứng dụng Android Mỗi thành phần góc nhìn khác tạo thành ứng dụng Android đầy đủ Khơng phải ứng dụng có đầy đủ thành phần đây, việc có hay khơng có thành phần tùy thuộc vào ứng dụng Một số thành phần có quan hệ phụ thuộc lẫn Mỗi thành phần có vai trò khác giúp định nghĩa ứng dụng Android đầy đủ Dưới có bốn loại thành phần Mỗi loại có mục đích khác có vòng đời khác giúp định nghĩa cách mà thành phần tạo hủy khác nhau: 1.1.1 Activity Một Activity đại diện hình đơn với giao diện người dùng VD: Chương trình Email tích hợp sẳn hệ điều hành Android có activity để hiển thị danh sách email, activity thứ hai dùng để hiển thị nội dung chi tiết email Mặc dù cách activity làm việc với để tạo nên trải nghiệm thống ứng dụng, nhiên thân chúng hoàn toàn độc lập với VD: Khi soạn thảo email với ứng dụng Email tích hợp sẳn người dùng mở activity ứng dụng Camera người dùng cần chia hình chụp thiết bị 1.1.2 Service Service thành phần dùng để thực thi công việc dưới hệ điều hành (Công việc thực thi ẩn với người dùng) Thành phần dùng cho công việc cần nhiều thời gian để thực thi dùng để điều khiển thực thi công việc từ xa tiến trình khác VD: Ứng dụng A chạy tiến trình pA kết nối đến ứng dụng B chạy tiến trình pB để u cầu B thực cơng việc 1.1.3 Content provider Một content provider dùng quản lý việc chia sẻ tập liệu ứng dụng Bạn lưu trữ liệu trền file, SQLite database, web nơi lưu trữ mà ứng dụng truy xuất Thơng qua việc sử dụng content provider ứng dụng khác truy vấn, chỉnh sửa tập liệu VD: Ứng dụng Contact tích hợp sẳn Android cung cấp content provider dùng để quản lý danh sách contact ứng dụng Bằng cách này, chương trình truy xuất danh sách contact mặc cho “nguyên tắc đặc quyền tối thiểu” đề cập (Lưu ý: Nếu không cung cấp content provider liệu contact sử dụng ứng dụng Contact truy xuất ứng dụng khác) Phát triển ứng dụng Smartphone – Android 1.1.4 Broadcast receiver Broadcast receiver thành phần hồi đáp tín hiệu phát tồn hệ thống Có nhiều broadcast receiver xây dựng sẳn hệ điều hành Android VD: Có broadcast receiver dùng để bắt tín hiệu tắt hình, tín hiệu pin yếu… Người phát triển tự xây dựng broadcast receiver để bắt tín cần thiết cho ứng dụng VD: Bắt tín hiệu để biết liệu tải thiết bị sẳn sang để sử dụng Mặc dù broadcast receiver không hiển thị giao diện cho người dùng quan sát tạo thông báo trạng thái Trong số trường hợp broadcast receiver khởi động service để thực thi số cơng việc Một khía cạnh độc đáo hệ điều hành Android thiết kế để ứng dụng khởi động activity ứng dụng khác VD: Nếu bạn muốn người dùng ứng dụng có chụp hình từ camera thiết bị Hiển nhiên công việc ứng dụng khác làm rồi, bạn không cần tạo activity để làm công việc mà đơn giản cần khởi động activity chụp ảnh ứng dụng Camera để chụp hình Khi chụp hình hồn tất, ảnh trả cho ứng dụng bạn Bằng cách ta tiết kiệm nhiều thời gian cách sử dụng lại cách thành phần có sẳn hệ điều hành Khi hệ thống khởi động thành phần, khởi động tiến trình cho ứng dụng đó(Nếu chưa khởi động) VD: Nếu ứng dụng bạn sử dụng activity ứng dụng Camera để chụp hình, hệ thống khởi động tiến trình ứng dụng Camera Chính điểm mà ứng dụng Android hoàn toàn khác so với ứng dụng tảng khác Một ứng dụng Android khơng có điểm bắt đầu (Khơng có hàm main) Do hệ thống thực thi ứng dụng tiến trình riêng biệt với quyền truy xuất hạn chế nên ứng dụng không quyền khởi động thành phần ứng dụng khác Để khởi động thành phần ứng dụng khác, bạn phải chuyển đối tượng kiểu Intent đến hệ điều hành, đối tượng kiểu Intent chứa thông tin thành phần mà bạn muốn khởi động Nhờ thông tin mà hệ điều hành khởi động thành phần phù hợp Khởi động thành phần Ba số bốn loại thành phần ứng dụng Android (Activity, Service, Broadcast receiver) khởi động đối tượng Intent Trong đối tượng Intent có ý nghĩ gần giống đường dẫn đến địa web (URLs) mà ngày người sử dụng Định dạng URLs Tim Berners phát minh để sử dụng giao thức Hypertext Transfer Protocol (HTTP) Định dạng hệ thống động từ kèm địa Địa xác định nguồn tài nguyên Web page, hình ảnh Động từ xác định cần phải làm với nguồn tài nguyên đó: GET để lấy liệu về, POST để đưa liệu lên để thực thi công việc Khái niệm Intent tương tự, Intent mô tả trừu tượng hành động thực thi Trong đối tượng Intent xác định thành phần (Activity, Service, Broadcast receiver) khởi động, liệu hành động cần thực thi với liệu kèm Phát triển ứng dụng Smartphone – Android VD: Để hiển thị thông tin contact Ta cần tạo đối tượng kiểu Intent xác định hành động “xem thông tin contact” thành phần Android khởi động để thực thi hành động activity “Contact details” ứng dụng Contact (Ứng dụng tích hợp sẳn hệ điều hành Android) liệu kèm id contact cần xem thơng tin Có thể sử dụng Intent để: - Khởi động Activity - Khởi động Service - Kết nối đến Remote service - Khởi động Broadcast receiver - Thực thi câu truy vấn liệu Content Provider 1.2 AndroidManifest.xml Trước hệ điều hành Android khởi động thành phần (Activity, Services, Broadcast receiver) hệ thống phải biết thành phần có tồn hay khơng cách đọc file AndroidManifest.xml ứng dụng Mỗi ứng dụng phải khai báo thành phần (Activity, Service, Broadcast receiver) file phải đặt thư mục gốc ứng dụng Mỗi file manifest có khai báo: - Định danh xác định quyền người sử dụng truy xuất internet, truy xuất danh sách contact… - Xác định phiên API tối thiểu mà ứng dụng thực thi Phiên API tương ứng với phiên hệ điều hành Android - Các tính phần cứng cần thiết cho ứng dụng GPS, camera, Bluetooth… - Các API liên kết sử dụng ứng dụng (VD: Google map…) - Và … - Một file AndroidManifest.xml có cấu trúc sau: Phát triển ứng dụng Smartphone – Android Trong có thẻ gốc thẻ manifest Thẻ gốc có thể application với thuộc tính xác định icon ứng dụng, tên ứng dụng… Trong thẻ application đặt khai báo thành phần tồn ứng dụng cách sử dụng thẻ: o : Khai báo Activity o : Khai báo service o : Khai báo Broadcast reciever o : Khai báo Content Provider Ngoài việc khai bao thành phần tồn ứng dụng có khai báo: o : Khai báo loại hình mà ứng dụng hổ trợ o : Khai báo phần cứng nhập liệu cần thiết cho ứng dụng (VD: Bàn phím, trackball, phiếm bấm năm chiều…) o : Các tính phần cứng cần thiết cho ứng dụng o : Phiên API tối thiểu Hello Android Ứng dụng kinh điển mà lập trình viên làm việc với ngơn ngữ lập trình xuất câu “Xin chào giới” Để bắt đầu làm quen với Android ta bắt đầu với ứng dụng “Xin chào Android” Tạo project Android với thông số sau: Project name: Hello Android Build target: Android 2.3.3 Phát triển ứng dụng Smartphone – Android Application name: Hello Android Package name: niit.android Create Activity: main Sau tạo project ta có cấu trúc sau: Phát triển ứng dụng Smartphone – Android ta làm với Facebook, Flickr etc.) Khi ứng dụng bạn lựa chọn chia sẻ ảnh người dùng điện thoại Intent có 02 dạng Intent tường minh - Explicit Intent: Xác định rỏ thành phần(Activity, Broadcast Receiver, Service) (thông qua phương thức setComponent(ComponentName) setClass(Context, Class)) thực thi hành động đặc tả Intent Thơng thường Intent không chứa thông tin khác (như category, type) mà đơn giản cách để ứng dụng mở Activity khác bên Activity Intent không tường minh - Implicit Intent: Không định thành phần cả, thay vào đó, chúng chứa đủ thơng tin để hệ thống xác định component có sẵn tốt để thực thi hiệu cho Intent Khi sử dụng Implicit intent, tính chất chuyên quyền loại Intent này, ta cần phải biết phải làm với Cơng việc đảm nhiệm “Tiến trình phân giải Intent” Tiến trình giúp định Intent đến Actvity, BroadcastReceiver, Service (hoặc hay nhiều activity/receiver) để xử lý hành động đặc tả Intent Bất thành phần (Activity, Broadcast Receiver, Service) muốn sử dụng ứng dụng phải đăng kí file AndroidManifest.xml Trong cần định nghĩa thẻ cung cấp thơng tin để hệ thống xác định mà thành phần xử lý (những action mà thành phần thực được) Intent Filter Một thành phần(Activity, Service, Broadcast receiver) cung cấp thông tin cho hệ điều hành biết loại đối tượng Intent mà “sử lý” cách khai báo nhiều Intent Filter Mỗi Intent Filter cung cấp thông tin “cái” mà thành phần xử lý(Hiển thị contact, gọi điện thoại…) Các thành phần khai báo Intent Filter cách sử dụng thẻ đặt thẻ khai báo thành phần(, , ) ví dụ sau: Ví dụ XX: Ví dụ khai báo Activity với thẻ chứa thông tin dùng để chọn lựa Intent Phát triển ứng dụng Smartphone – Android Với Intent tường minh thành phần nhận Intent xác định cụ thể, nhiên với Intent khơng tường minh hệ thống tiến hành so sánh thông tin phụ khai báo Intent với thành phần khai báo tệp AndroidManifest.xml tất ứng dụng cài đặt thiết bị để tìm thành phần phù hợp Một Intent Filter có thành phần sau: o action: Tên hành động mà thành phần thực thi o type:Kiểu liệu thành phần thực thi o category: Phân nhóm thành phần Đối với liệu nội dung cụ thể (VD: URI) việc xem xét lựa chọn Intent phù hợp dựa vào lược đồ (Scheme) liệu cung cấp (VD: http:// mailto: …) Luật xác định thành phần phù hợp Intent Để xác định thành phần phù hợp với Intent hay không hệ thống tiến hành xem xét nguyên tắc đây: - Trước tiên Intent gởi đi, Android tìm kiếm thành phần (Activity, BroadcastReceiver, Service) có action-name phù hợp với Intent Nếu có thành phần phù hợp Android mở thành phần lên để thực thi hành động theo yêu cầu Ngược lại có nhiều thành phần có action-name phù hợp Android u cầu người dùng chọn thành phần - Ngược lại khơng có thành phần phù hợp Android tiến hành xem xét kiểu dự liệu Intent cung cấp xem có thành phần có đủ lực để sử lý kiểu liệu khơng Nếu khơng Android tiến hành xem xét scheme liệu để tìm kiếm thành phần phù hợp Nếu khơng tìm thành phù hợp Android tiến hành xem xét thành phần có category với category xác định đối tượng Intent để chọn thành phần Ví dụ XX: Khai báo Activity mở ứng dụng khởi chạy: VD khai báo Activity tên main Intent-Filter Activity có thuộc tính: Phát triển ứng dụng Smartphone – Android - : Khai báo Activity main thể thực thi hành động mở Activity - : Khai báo Activity main thuộc nhóm Activity mở ứng dụng chạy người dùng Bằng cách khai báo Activity tên main Activity (Hay gọi Activity chính) mở ứng dụng chạy người dùng 5.2 Sử dụng Intent nào? Các phương thức để khởi động thành phần cách sử dụng Intent: 5.2.1 Intent tường minh thực thi Activity Như trình bày phần trên, intent dùng thuộc tính phụ để định đích danh tên Activity mở Để thực điều này, lớp Intent cung cấp phương thức setComponent(ComponentName) setClass(Context, Class) setClassName(Context, String) setClassName(String, String) Cách gọi dùng để gọi Activities ứng dụng Ví dụ: Intent intent = new Intent(); intent.setClassName("ten_package", "ten_lop_activity_ben_trong_package"); startActivity(intent); 5.2.2 Intent không tường minh thực thi Activity Trong trường hợp intent không định lớp cụ thể mà thay vào hệ thống dùng liệu khác (action, data, type, etc.) định xem thành phần (Activity, Service, Broadcast receiver) ứng dụng thích hợp để đáp ứng intent Phát triển ứng dụng Smartphone – Android Như nhắc đến phần trên, thành phần ứng dụng Android phải khai báo tệp AndroidManifest.xml Trong thơng tin action category thành phần nào(Activity, Service, Broadcast receiver, Content Provider) khai báo thẻ intent-filter (Tất nhiên muốn gọi hành động thực thi thành phần định sẳn ta không cần quan tâm đến việc khai báo này) Ví dụ XX: Ví dụ khai báo Activity tên ActivityExample Intent-Filter Activity có thuộc tính: xác định ActivityExample sử lý đối tượng Intent có đính kèm liệu tệp video với đường dẫn kiểu đường dẫn http 5.2.3 Truyền nhận thông tin Activity sử dụng đối tượng intent Đầu tiên ta có hai Activity tên main ColorPicker có giao diện sau: Phát triển ứng dụng Smartphone – Android Activity main Activity chương trình, hiển thị ba màu dòng RED, GREEN BLUE Khi người dùng nhấp nút “Lựa chọn màu u thích” chương trình mở lên cửa sổ Activity ColorPicker cho phép người dùng check chọn ba màu Sau check chọn màu ứng dụng tự tắt Activity ColorPicker to màu ba dòng RED, GREEN BLUE hình sau: Phát triển ứng dụng Smartphone – Android Trong việc truyền nhận thông tin hai Activity thể qua mô hình sau: main Intent: action + data ColorPicker startActivityForResult() Intent intent = getIntent(); … … … … … … onActivityResult() setResult() Request Code Request Result Data Trên phương thức main ta tạo đối tượng Intent chứa thông tin dùng để mở Activity ColorPicker sử dụng phương thức starActivityForResult() để mở Activity ColorPicker Khi Activity ColorPicker mở lên, main có gởi liệu cho ColorPicker phương thức onCreate() ColorPicker dùng phương thức getIntent() để lấy đối tượng Intent dùng để mở lên lấy Phát triển ứng dụng Smartphone – Android liệu đính kèm Sau thao tác xong, ColorPicker tạo đối tượng Intent trả cho main Activity main thông báo nhận đối tượng Intent trả thông qua phương thức onActivityResult() Khi main mở Activity ColorPicker cần nhận kết nên ta phải cung cấp thông số “request code” Khi ColorPicker tắt trả đối tượng Intent chứa 03 thành phần sau: “Request code” dùng để mở lên “Request result”: Thuộc tính có hai giá trị RESULT_OK RESULT_CANCEL tương ứng với việc người dùng hồn tất cơng việc hủy cơng việc thực ColorPicker Data: Dữ liệu trả Tiến hành tạo project Android với thông số sau: Project name: Intent example Build target: Android 2.3 Application name: Intent example Package name: niit.android.intentexample Create Activity: main Chỉnh sửa tệp main.xml với nội dung sau: Phần mã xml tạo thành giao diện Activity main hình Trên giao diện kể có Button có thuộc tính android:onClick="buttonClickHandler" cho biết người dùng nhấn lên nút nhấn hệ thống gọi phương thức buttonClickHanler() đặt Activity chứa giao diện Chỉnh sửa tệp main.java thành nội dung sau: package niit.android.intentexample; import import import import import import android.app.Activity; android.content.Intent; android.graphics.Color; android.os.Bundle; android.view.View; android.widget.TextView; public class main extends Activity { private int color = Color.RED; public static final int COLOR_PICKER_CODE = 100; Phát triển ứng dụng Smartphone – Android @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setTextView(); } public void resetAllTextView() { TextView labelred, labelgreen, labelblue; labelred = (TextView)findViewById(R.id.labelRed); labelred.setTextColor(Color.parseColor("#666666")); labelgreen = (TextView)findViewById(R.id.labelGreen); labelgreen.setTextColor(Color.parseColor("#666666")); labelblue = (TextView)findViewById(R.id.labelBlue); labelblue.setTextColor(Color.parseColor("#666666")); } public void buttonClickHandler(View v) { Intent request = new Intent(this, ColorPickerActivity.class); Bundle bundle = new Bundle(); bundle.putInt("color", color); request.putExtras(bundle); startActivityForResult(request, COLOR_PICKER_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case COLOR_PICKER_CODE: if (resultCode == RESULT_OK) { Bundle bundle = data.getExtras(); color = bundle.getInt("color"); setTextView(); } } } private void setTextView() { int tvId = 0; resetAllTextView(); switch (color) { case Color.RED: tvId = R.id.labelRed; break; Phát triển ứng dụng Smartphone – Android case Color.GREEN: tvId = R.id.labelGreen; break; case Color.BLUE: tvId = R.id.labelBlue; break; default: break; } TextView mycolor = (TextView)findViewById(tvId); mycolor.setTextColor(color); } } Trong Activity main chỉnh sửa ta nạp lên phần giao diện định nghĩa tệp main.xml: setContentView(R.layout.main); Sau thiết lập giao diện cho activity main ta gọi phương thức setTextView() để gián màu cho TextView Ở phương thức ta tiến hành thay đổi màu ba TextView RED, GREEN BLUE activity main chương trình thành màu #666666(Màu xám) cách gọi phương thức resetAllTextView() Ngoài ta định nghĩa thêm phương thức buttonClickHanler() phương thức gọi người dùng nhấn vào nút “Lựa chọn màu sắc yêu thích” Trong phương thức ta khai báo đối tượng Intent: Intent request = new Intent(this,ColorPickerActivity.class); Bằng cách ta tạo đối tượng Intent tường minh định rỏ thành phần cần mở lên activity tên ColorPickerActivity Sau ta tiến hành khởi tạo đối tượng Bundle bundle đặt vào đối tượng Bundle biến kiểu int (private in color = Color.RED) với giá trị mặc định Color.RED (Đây số int đại diện cho màu đỏ) cho từ khóa “color” đặt đối tượng Bundle vào request: Bundle bundle = new Bundle(); bundle.putInt("color", color); request.putExtras(bundle); Sau khởi tạo thành công đối tượng Intent ta tiến hành gởi đối tượng lệnh: startActivityForResult(request, COLOR_PICKER_CODE); Lệnh gởi đối tượng Intent dùng để mở Activity request code COLOR_PICKER_CODE Đây tĩnh khai báo bên trên: public static final int COLOR_PICKER_CODE = 100; Đây kiểu int có giá trị 100 Hằng tĩnh dùng để xác định kết trả Activity ColorPickerActivity sau Phát triển ứng dụng Smartphone – Android Thêm tệp picker.xml với nội dung sau: Phát triển ứng dụng Smartphone – Android Phần mã xml tạo thành giao diện ColorPickerActivity hình Trong giao diện có 03 RadioButton cho phép chọn ba màu đỏ, xanh xanh biển Ta đặt 03 RadioButton RadioGroup để đảm bảo thời điểm chọn 03 màu sắc kể Cả 03 RadioButton để có thuộc tính là: android:onClick="radioClickHandler" Thuộc tính cho biết tên phương thức gọi người dùng click vào RadioButton kể phương thức radioClickHandler() Activity chứa giao diện gọi thực thi Thêm tệp ColorPickerActivity.java với nội dung sau: package niit.android.intentexample; import import import import import android.app.Activity; android.content.Intent; android.graphics.Color; android.os.Bundle; android.view.View; public class ColorPickerActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.picker); Intent request = getIntent(); Bundle bundle = request.getExtras(); int color = bundle.getInt("color"); int radioButtonId = 0; switch (color) { case Color.RED: radioButtonId = R.id.radioRed; break; case Color.GREEN: radioButtonId = R.id.radioGreen; break; case Color.BLUE: radioButtonId = R.id.radioBlue; break; default: break; } RadioButton rBtn = (RadioButton)findViewById(radioButtonId); rBtn.setChecked(true); } Phát triển ứng dụng Smartphone – Android public void radioClickHandler(View v) { Intent answer = new Intent(); Bundle bundle = new Bundle(); if(v.getId()==R.id.radioBlue) { bundle.putInt("id", R.id.labelBlue); bundle.putInt("color", Color.BLUE); } else if(v.getId()==R.id.radioRed) { bundle.putInt("id", R.id.labelRed); bundle.putInt("color", Color.RED); } else { bundle.putInt("id", R.id.labelGreen); bundle.putInt("color", Color.GREEN); } answer.putExtras(bundle); setResult(RESULT_OK, answer); finish(); } } Trong Activity ColorPickerActivity tạo ta nạp lên phần giao diện định nghĩa tệp picker.xml: setContentView(R.layout.picker); Sau nạp giao diện cho ColorPickerActivity xong ta tiến hành lấy liệu gởi activity main Đầu tiên ta gọi phương thức getIntent() để lấy đối tượng Intent dùng để mở activity lên: Intent request = getIntent(); Sau lấy đối tượng Bundle đính kèm đối tượng Intent gởi main: Bundle bundle = request.getExtras(); Và lấy biến “color”: int color = bundle.getInt("color"); int radioButtonId = 0; Tùy thuộc biến color có giá trị Color.RED, Color.GREEN hay Color.BLUE mà ta gán giá trị chi biến radioButtonId R.id.radioRed, R.id.radioGreen hay R.id.radioBlue: switch (color) { case Color.RED: Phát triển ứng dụng Smartphone – Android radioButtonId = R.id.radioRed; break; case Color.GREEN: radioButtonId = R.id.radioGreen; break; case Color.BLUE: radioButtonId = R.id.radioBlue; break; default: break; } Cuối tiến hành lấy RadioButton có id radioButtonId chuyển thành trạng thái “Checked” RadioButton rBtn = (RadioButton)findViewById(radioButtonId); rBtn.setChecked(true); Qua phần mã lệnh kể ta thực phần chức cho phép activity main gởi biến chứa mã màu (Mặc định Color.RED), ColorPickerActivity nhận mã màu main gởi Nó cập nhập RadioButton tương ứng Ngồi ColorPickerActivity có phương thức: public void radioClickHandler(View v) Đây phương thức gọi người dùng nhấn lên 03 RadioButton định nghĩa tệp xml chứa giao diện picker.xml Phương thức nhận vào tham số View v Khi người dùng nhấn chọn 03 RadioButton phương thức radioClickHandler() khởi chạy truyền theo đối tượng RadioButton mà người dùng nhấn vào Trên phương thức ta có khai báo: Intent answer = new Intent(); Bundle bundle = new Bundle(); Ta khởi tạo hai đối tượng Intent answer Bundle bundle Đối tượng Intent answer đối tượng trả cho activity main activity ColorPickerActivity đóng lại Đối tượng Bundle bundle đối tượng chứa liệu cần trả cho main Tùy theo người dùng nhấn vào RadioButton ta thêm vào đối tượng bundle hai số int có mã “id” chứa khóa ba nhãn (RED, GREEN BLUE) số int có mã “color” giá trị màu sắc cần cập nhật cho nhãn bundle.putInt("color", Color.GREEN); Cuối ta đưa đặt đối tượng bundle vào answer: answer.putExtras(bundle); Tiến hành gọi phương thức setResult() truyền vào 02 thông số là: - “Request result” RESULT_OK để báo công việc thực ColorPickerActivity hoàn tất, gán “request result” REQUEST_CANCEL Phát triển ứng dụng Smartphone – Android - Đối tượng Intent answer chứa liệu trả setResult(RESULT_OK, answer); Cuối gọi phương thức finish() để đóng ColorPickerActivity: finish(); Sau ColorPickerActivity đóng kết trả cho activity main qua việc gọi phương thức: protected void onActivityResult(int requestCode, int resultCode, Intent data) Phương thức nhận vào 03 tham số: - int requestCode: Request code dùng để mở ColorPickerActivity lên - int resultCode: RESULT_OK RESULT_CANCEL cho biết cơng việc hồn tất hay bị hủy người dùng - Intent data: Đối tượng Intent chứa liệu ColorPickerActivity trả Trong phương thức ta tùy theo liệu trả mà tiến hành cập nhật màu sắc nhãn cách gọi lại phương thức setTextView() trình bày .. .Phát triển ứng dụng Smartphone – Android Phát triển ứng dụng Smartphone Phần 01: Làm quen với Android Lê Đức Huy Email: leduchuy89vn@gmail.com Phát triển ứng dụng Smartphone – Android... tin Activity sử dụng đối tượng intent 33 Phát triển ứng dụng Smartphone – Android Phát triển ứng dụng Smartphone – Android Tổng quan Android Ứng dụng Android viết ngôn ngữ Java Bộ công cụ Android... hay không) Phát triển ứng dụng Smartphone – Android Phần cung cấp cho người đọc số khái niệm thành phần ứng dụng Android 1.1 Các thành phần ứng dụng Application Cách thành phần ứng dụng Android