Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 125 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
125
Dung lượng
3,09 MB
Nội dung
TRƯỜNG ĐẠI HỌC BẠC LIÊU KHOA CÔNG NGHỆ THÔNG TIN BÀI GIẢNG LẬP TRÌNH ỨNG DỤNG CHO MOBILE Biên soạn: Ks Trần Khánh Luân LƯU HÀNH NỘI BỘ Bạc Liêu, tháng 07 / 2014 THÔNG TIN CHUNG Tên môn học: Lập trình ứng dụng cho Mobile Mã số môn học: TH39A Số tín chỉ: 2; lý thuyết: 20 tiết; thực hành: 20 tiết Môn học tiên quyết: Cơ sở liệu Lập trình Java Thời gian học: năm thứ Mục tiêu môn học cung cấp cho người học kiến thức công nghệ kỹ thuật phát triển phần mềm ứng dụng cho thiết bị di động, có kỹ lập trình phát triển phần mềm ứng dụng cho thiết bị di động tảng cụ thể (Hệ điều hành Android) Trên sở người học tự nghiên cứu sâu rộng phát triển ứng dụng cho thiết bị di động Đánh giá môn học - Kiểm tra học kỳ: Báo cáo tập nhóm để lấy điểm kiểm tra học kỳ sau hoàn thành tối thiểu 50% số tiết - Thi cuối học kỳ: Trắc nghiệm, thời gian làm 45 phút Sinh viên phải tham gia đầy đủ đợt kiểm tra học kỳ thi cuối học kỳ Và cách tính điểm cho môn học sau: ĐHP = ( Điểm bình quân kiểm tra, tập + điểm thi HP x2 ): Chính sách môn học - Dự lớp: 20 tiết lý thuyết; Thực hành phòng máy: 20 tiết - Làm tập lớp tập nhóm - Dụng cụ học tập: tập, viết, máy tính thiết bị hỗ trợ khác - Dự lớp: 75% số tiết qui định học phần tích cực tham gia thảo luận lớp MỤC LỤC Trang CHƯƠNG 1: CÁC KHÁI NIỆM CĂN BẢN 1.1 Điện toán di động, thiết bị di động lập trình di động 1.1.1 Điện toán di động thiết bị di động 1.1.2 Lập trình di động 1.2 Mạng di động 1.3 Các tảng phát triển công nghệ di động 1.3.1 Android 1.3.2 iOS 1.3.3 Blackberry – RIM 10 1.3.4 Windows Mobile / Windows (WP) 10 1.3.5 Symbian OS 11 1.3.6 Các hệ điều hành khác 11 1.4 Các vấn đề lưu ý xây dựng ứng dụng điện thoại di động 11 CHƯƠNG 2: CƠ SỞ PHÁT TRIỂN ỨNG DỤNG 17 2.1 Tổng quan tảng Android 17 2.1.1 Khái niệm Android 17 2.1.2 Tóm tắt lịch sử phát triển Android 18 2.1.3 Kiến trúc Android 30 2.2 Máy ảo DALVIK 34 2.3 Chu kỳ sống ứng dụng Android 35 2.3.1 Chu kỳ sống Activity 35 2.3.2 Chu kỳ sống ứng dụng 36 2.3.3 Các tiến trình 37 2.4 Công cụ lập trình 37 2.4.1 Android SDK 37 2.4.2 Sử dụng Eclipse để lập trình 38 2.4.3 Sử dụng Netbeans để lập trình 39 2.5 Một số thành phần Android project 43 2.5.1 Xây dựng dự án Android đơn giản 43 2.5.2 Cấu trúc lưu trữ dự án Android 45 2.6 Các thành phần ứng dụng Android 46 2.6.1 Hoạt động (Activity) 46 2.6.2 Service 47 2.6.3 Bộ nhận quảng bá (Broadcast receivers) 48 2.6.4 Content Provider 49 2.6.5 Các thành phần kích hoạt (các Intent) 49 2.6.6 Tập tin khai báo (manifest) 50 2.6.7 Bộ lọc Intent 51 2.6.8 Notification 52 CHƯƠNG 3: LẬP TRÌNH GIAO DIỆN MỨC CAO 54 3.1 Layout 55 3.1.1 LinearLayout 55 3.1.2 RelativeLayout 56 3.1.3 TableLayout 57 3.2 Text Controls 59 3.2.1 TextView 59 3.2.2 EditText 59 3.3 Button Controls 60 3.3.1 Button 60 3.3.2 ImageButton 60 3.3.3 CheckBox 61 3.3.4 RadioGroup RadioButton 61 3.4 ImageView 62 3.5 ListView 62 3.6 MapView 64 3.7 Dialog Toast 65 3.7.1 Dialog 65 3.7.2 Toast 67 3.8 Menu 68 3.8.1 Options Menu 68 3.8.2 Context Menu 69 3.9 Date Time Controls 71 3.9.1 DatePicker 71 3.9 TimePicker 71 CHƯƠNG 4: LẬP TRÌNH GIAO DIỆN MỨC THẤP 77 4.1 Xử lý kiện 77 4.1.1 Xử lý kiện tương tác trực tiếp 77 4.1.2 Xử lý kiện từ phím 78 4.2 Lập trình giao diện mức thấp 78 4.2.1 Lập trình với lớp View 79 4.2.2 Lập trình luồng giao diện mức thấp 82 4.2.3 Lập trình với SurfaceView 84 CHƯƠNG 5: LƯU TRỮ DỮ LIỆU VỚI SQLITE 95 5.1 Tìm hiểu SQLite 95 5.1.1 SQLite ? 95 5.1.2 Làm việc với SQLite 95 5.2 Lập trình với SQLite 100 TÀI LIỆU THAM KHẢO 120 Lập trình ứng dụng cho Mobile CHƯƠNG 1: CÁC KHÁI NIỆM CĂN BẢN (Lý thuyết tiết) Mục tiêu: Giới thiệu cho bạn sinh viên biết nắm rõ số khái niệm điện toán di động, thiết bị di động, mạng động giới thiệu số tảng để phát triển thiết bị di động Yêu cầu: Sinh viên lên lớp cần xem trước nội dung học trước nhà Sau lên lớp nghe giảng, giải thích thảo luận để hiểu rõ Nội dung: 1.1 Điện toán di động (Mobile computing), thiết bị di động (Mobile devices) lập trình di động (Mobile programming) 1.1.1 Điện toán di động (Mobile computing) thiết bị di động (Mobile devices) Điện toán di động (Mobile computing) chức tính toán hệ thống di động, chức tính toán hiểu bao gồm việc lưu trữ trao đổi thông tin Điện toán di động hiểu tương tác người với máy tính mà máy tính di chuyển thời gian tương tác Điện toán di động liên quan đến thông tin di động, phần cứng di động phần mềm di động Thiết bị di động (Mobile devices) hệ thống mà chúng di chuyển dễ dàng có khả tính toán chúng di động Một số loại thiết bị di động như: Laptops, PDAs (Personal Digital Assistants), Mobile phone, TV set-top boxes, dụng cụ đo lường từ xa xe, thiết bị nhúng, … Các thiết bị di động thường có tài nguyên phần cứng giới hạn nên chúng gọi thiết bị hạn chế (constrained devives) Hình 1.1 Ảnh minh họa cho thiết bị di động 1.1.2 Lập trình di động (Mobile programming) Kiến trúc tổng quát điện thoại di động lập trình: Ks Trần Khánh Luân Lập trình ứng dụng cho Mobile Hình 1.2 Kiến trúc điện thoại di động lập trình - Nhà sản xuất cung cấp việc truy cập đến platform (với số hạn chế), việc sử dụng nhân (kernel) hardware drivers họ, điều mà có phần mềm thay đổi điện thoại di động, có platform phần cứng không đổi - Bên cạnh khả lập trình, điện thoại di động có tính mềm dẻo Một điện thoại có nhiều khả chức khác chia thành nhóm: giao diện người dùng, giao diện truyền thông nguồn tài nguyên cài đặt sẵn (builtin) Hình 1.3 Những tính sẵn có điện thoại di động + Giao diện người dùng (user interface) tiêu biểu bao gồm: the speaker, microphone, camera, display, built-in sensors and keyboard + Các nguồn tài nguyên cài đặt sẵn bao gồm: the battery, CPU, nhớ + Giao diện truyền thông tiêu biểu bao gồm: truyền thông tê bào (cellular) truyền thông tầm ngắn (short-range) Lập trình di động việc xây dựng phần mềm ứng dụng hay chức cho thiết bị di động tảng (platform) xác định Tiến trình bao gồm: thu thập yêu cầu, chọn kiến trúc phần mềm di động mẫu thiết kế (design pattern), viết chương trình, thử, gở lỗi / sửa chữa, bảo trì phần mềm Ks Trần Khánh Luân Lập trình ứng dụng cho Mobile 1.2 Mạng di động Mạng thiết bị di động hay mạng di động, mạng mobile (tiếng Anh: cellular network, nghĩa mạng tế bào) mạng vô tuyến bao gồm số lượng tế bào vô tuyến (radio cell), gọi tắt tế bào, phục vụ máy phát (transmitter) cố định, gọi trạm gốc (cell site base station) Các tế bào dùng để phủ vùng khác với mục đích cung cấp vùng phủ sóng diện rộng gấp nhiều lần so với tế bào Mạng tế bào không đối xứng với tập hợp trạm thu phát vô tuyến cố định, trạm phục vụ tế bào tập trạm thu phát phân tán (thường di động lúc vậy) cung cấp dịch vụ cho người sử dụng Yêu cầu mạng thuộc khái niệm mạng tế bào phương cách để trạm phân tán phân biệt tín hiệu từ máy phát với tín hiệu từ máy phát khác Có hai giải pháp thông dụng cho vấn đề này, FDMA (Frequency Division Mutiple Access - đa truy nhập phân tần số) CDMA (Code Division Multiple Access - đa truy nhập phân mã) FDMA hoạt động cách sử dụng tần số khác với tất cell láng giềng Bằng việc điều chỉnh theo tần số cell chọn, trạm khuếch đại tránh tín hiệu từ cell láng giềng Nguyên lý CDMA phức tạp cho kết tương tự; trạm thu phát phân tán chọn cell “nghe” Không thể sử dụng phương pháp dồn kênh khác PDMA (Polarisation Division Multiple Access - đa truy nhập phân cực) TDMA (Time Division Multiple Access - đa truy nhập phân theo thời gian) để tách tín hiệu cell với tín hiệu cell cạnh nó, hiệu ứng hai phương pháp thay đổi theo vị trí nên việc tách tín hiệu không khả thi Tuy nhiên, số hệ thống, TDMA kết hợp với FDMA CDMA để đem lại nhiều kênh vùng phủ tế bào đơn lẻ Trong ví dụ ta công ty taxi, thiết bị liên lạc vô tuyến có nút chỉnh Nút có chức chọn kênh cho phép chỉnh thiết bị vô tuyến theo tần số khác Khi lái xe chạy quanh thành phố, họ chuyển từ kênh sang kênh khác Những người lái xe biết tần số phủ khu vực xấp xỉ nào, họ không nhận tín hiệu từ máy phát, họ thử kênh khác tìm thấy kênh hoạt động Tại thời điểm có người lái xe nói, điều phối viên mời (kiểu TDMA) Ví dụ điển hình mạng di động mạng điện thoại di động (ĐTDĐ) Một ĐTDĐ điện thoại mang được, mà nhận thực gọi qua trạm sở, tháp truyền tín hiệu Các sóng vô tuyến sử dụng để truyền tín hiệu tới truyền tín hiệu từ ĐTDĐ Các vùng địa lý rộng lớn (thể vùng bao phủ nhà cung cấp dịch vụ) chia thành cell nhỏ để ngăn chặn việc tín hiệu đường ngắm số lượng lớn điện thoại hoạt động vùng Mỗi cell site bao gồm vùng từ 0.25 tới 20 dặm hơn, thông thường khoảng từ 0.5 tới dặm, chồng chéo lên cell site khác Tất cell site nối với thiết bị chuyển đổi chuyển mạch (các “switch”), mà kết nối tới mạng điện thoại chung tới chuyển mạch khác công ty điện thoại Khi người dùng điện thoại di chuyển từ miền cell sang miền cell khác, chuyển mạch tự động yêu cầu handset cell site với tín hiệu mạnh (được thông báo bở handset) để chuyển tới kênh sóng radio (tần số) Khi handset phản hồi lại cell site mới, chuyển đổi chuyển mạch kết nối tới cell site Với công nghệ CDMA, tiến trình diễn khác Các handset đa CDMA chia sẻ kênh sóng radio riêng; tín hiệu tách cách sử dụng mã giả nhiễu (PN code) riêng phone Khi Ks Trần Khánh Luân Lập trình ứng dụng cho Mobile người dùng di chuyển từ cell tới cell khác, handset thiết lập kết nối sóng radio đồng thời với nhiều cell site (hoặc sector site) Đây gọi “chuyển mạng mềm” không giống với công nghệ cellular truyền thống, điểm nơi mà điện thoại chuyển mạch tới cell Các ĐTDĐ đời sử dụng cell tần số sóng radio nguồn hạn chế bị chia sẻ Các cell-site handset thay đổi tần số điều khiển máy tính sử dụng máy phát công suất thấp để số giới hạn tần số sóng radio có tái sử dụng nhiều người gọi với nhiễu thấp Cụ thể, handset CDMA phải có điều khiển công suất ổn định tuyệt đối để tránh nhiễu với handset khác Một lợi ích khác handset cần lượng pin Vì hầu hết ĐTDĐ sử dụng công nghệ cellular, bao gồm GSM, CDMA, AMPS (tương tự), thuật ngữ “cell phone” dụng thay cho thuật ngữ “mobile phone” Tuy nhiên, ngoại lệ với ĐTDĐ sử dụng công nghệ cellular điện thoại vệ tinh Các hệ thống cũ ngày trước nguồn gốc cellular sử dụng nơi thích hợp Một số công nghệ mobile số khác bao gồm Global System for Mobile Communications (GSM), General Packet Radio Service (GPRS), Code Division Multiple Access (CDMA), Evolution-Data Optimized (EV-DO), Enhanced Data Rates for GSM Evolution (EDGE), 3GSM, Digital Enhanced Cordless Telecommunications (DECT), Digital AMPS (IS-136/TDMA), Integrated Digital Enhanced Network (iDEN) Hình 1.4 Mô hình mô mạng điện thoại di động Các hệ mạng thông tin di động: - Mạng thông tin di động 1G mạng thông tin di động không dây giới Nó hệ thống giao tiếp thông tin qua kết nối tín hiệu analog giới thiệu lần vào năm đầu thập niên 80s Nó sử dụng ăng-ten thu phát sóng gắn ngoài, kết nối theo tín hiệu analog tới trạm thu phát sóng nhận tín hiệu xử lý thoại thông qua module gắn máy di động Chính mà hệ máy di động giới có kích thước to cồng kềnh tích hợp lúc module thu tín phát tín hiệu Ks Trần Khánh Luân Lập trình ứng dụng cho Mobile Hình 1.5 Điện thoại đại diện cho hệ 1G Tiêu biểu cho hệ mạng di động 1G thiết bị thu phát tin hiệu analog to kềnh Mặc dù hệ mạng di động với tần số từ 150MHz mạng 1G phân nhiều chuẩn kết nối theo phân vùng riêng giới: NMT (Nordic Mobile Telephone) chuẩn dành cho nước Bắc Âu Nga; AMPS (Advanced Mobile Phone System) Hoa Kỳ; TACS (Total Access Communications System) Anh; JTAGS Nhật; C-Netz Tây Đức; Radiocom 2000 Pháp; RTMI Ý - Mạng thông tin di động 2G hệ kết nối thông tin di động mang tính cải cách khác hoàn toàn so với hệ Nó sử dụng tín hiệu kỹ thuật số thay cho tín hiệu analog hệ 1G áp dụng lần Phần Lan Radiolinja (hiện nhà cung cấp mạng tập đoàn Elisa Oyj) năm 1991 Mạng 2G mang tới cho người sử dụng di động lợi ích tiến suốt thời gian dài: mã hoá liệu theo dạng kỹ thuật số, phạm vi kết nối rộng 1G đặc biệt xuất tin nhắn dạng văn đơn giản – SMS Theo đó, tín hiệu thoại thu nhận đuợc mã hoá thành tín hiệu kỹ thuật số nhiều dạng mã hiệu (codecs), cho phép nhiều gói mã thoại lưu chuyển băng thông, tiết kiệm thời gian chi phí Song song đó, tín hiệu kỹ thuật số truyền nhận hệ 2G tạo nguồn lượng sóng nhẹ sử dụng chip thu phát nhỏ hơn, tiết kiệm diện tích bên thiết bị hơn, … Hình 1.6 Điện thoại đại diện cho hệ 2G Mạng 2G chia làm nhánh chính: TDMA (Time Division Multiple Access) CDMA nhiều dạng kết nối mạng tuỳ theo yêu cầu sử dụng từ thiết bị hạ tầng phân vùng quốc gia: Ks Trần Khánh Luân Lập trình ứng dụng cho Mobile }catch(Exception e){ System.out.println(e); } db.close(); } private void dis(int j) { db.open(); Cursor c = db.getTitle(j); if(c.moveToFirst()) DisplayTitle(c); else Toast.makeText(this, "No title found", Toast.LENGTH_LONG).show(); db.close(); } private void del(int j) { db.open(); if(db.deleteTitle(j)) Toast.makeText(this, "Delete successful.", Toast.LENGTH_LONG).show(); else Toast.makeText(this, "Delete failed.", Toast.LENGTH_LONG).show(); db.close(); } public void DisplayTitle(Cursor c) { Toast.makeText(this, "id: " + c.getString(0) + "\n" "ISBN: " + c.getString(1) + "\n" + "TITLE: " + c.getString(2) + "\n"+ "PUBLISHER: " + c.getString(3), Toast.LENGTH_LONG).show(); } } Cuối chạy thử chương trình để xem kết Hình 5.1 Kết ứng dụng thực thi Ks Trần Khánh Luân 106 Lập trình ứng dụng cho Mobile Tóm tắt chương: Chương giới thiệu đến người đọc Tổng quan SQLite, công cụ hỗ trợ quản lý liệu thiết bị di động cách thức để Lập trình với SQLite Câu hỏi ôn tập: Câu 1: SQLite ? Câu 2: Ưu điểm khuyết điểm SQLite Câu 3: Để thao tác với sở liệu lưu trữ SQLite Android ta sử dụng đối tượng nào? Chức chúng ? Các phương thức mà SQLiteOpenHelper hỗ trợ để lấy đối tượng SQLiteDatabase ? Câu 4: Các phương thức mà lớp SQLiteOpenHelper hỗ trợ để tạo sở liệu ? Chức phương thức ? Mỗi sở liệu ứng dụng Android có phiên ? Câu 5: SQLite sử dụng phương thức để truy vấn liệu ? Cho ví dụ câu lệnh truy vấn Câu 6: Truy vấn trả đối tượng trỏ (Cursor) Con trỏ trình bày kết truy vấn trỏ tới hàng sở liệu ListView widget cho phép hiển thị danh sách giá trị trỏ Để làm việc với sở liệu ListView dùng class ? Bài tập thực hành: Bài a Tạo hai Activity, Activity có giao diện gồm edittext, button Gui, button Thoat textview Khi chạy ứng dụng Activity thứ mở Nhập nội dung vào edittext nhấn nút gửi Activity thứ hai gọi textview Activity hiển thị nội dung vừa nhận Cũng nhập nội dung gửi từ Activity Khi nhấn nút Thoat Activity thoát ứng dụng (Xem chương trình mẫu 1, phần giao diện XML sinh viên tự xây dựng) putExtra("text1",text1); getStringExtra("text1") Activity Activity putExtra("text2",text2); getStringExtra("text2"); Hình Ks Trần Khánh Luân 107 Lập trình ứng dụng cho Mobile Hình Hình Chương trình mẫu Activity package buoi1.bai3; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Activity1 extends Activity { /** Called when the activity is first created */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main1); final EditText edit1 = (EditText)this.findViewById(R.id.ed1); Ks Trần Khánh Luân 108 Lập trình ứng dụng cho Mobile EditText edit2 = (EditText)this.findViewById(R.id.ed2); final Button btn1 = (Button)this.findViewById(R.id.bt1); final Button btn2 = (Button)this.findViewById(R.id.bt2); Intent geti1 = getIntent(); String gettext1 = geti1.getStringExtra("text2"); edit2.setText(String.valueOf(gettext1)); btn1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub String text1 = edit1.getText().toString(); Intent i = new Intent(Activity1.this, Activity2.class); i.putExtra("text1", text1); startActivity(i); finish(); } }); btn2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub System.exit(0); } }); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); } } Activity package buoi1.bai3; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; Ks Trần Khánh Luân 109 Lập trình ứng dụng cho Mobile import android.widget.EditText; public class Activity2 extends Activity { /** Called when the activity is first created */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); final EditText edit3 = (EditText)this.findViewById(R.id.ed3); final EditText edit4 = (EditText)this.findViewById(R.id.ed4); final Button btn3 = (Button)this.findViewById(R.id.bt3); final Button btn4 = (Button)this.findViewById(R.id.bt4); String gettext2; Intent geti2 = getIntent(); gettext2 = geti2.getStringExtra("text1"); edit4.setText(String.valueOf(gettext2)); btn3.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub String text2 = edit3.getText().toString(); Intent i2 = new Intent(Activity2.this, Activity1.class); i2.putExtra("text2", text2); startActivity(i2); finish(); } }); btn4.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub System.exit(0); } }); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); Ks Trần Khánh Luân 110 Lập trình ứng dụng cho Mobile } } Bài Import chạy thử project TestSQLite thư mục Vi du Sau vận dụng để tạo chương trình có giao diện hình 4, nhấn nút Registry giao diện hình hiển thị Nhập xong thông tin nhấn nút Registry xuất hộp thoại thông báo, đồng thời thông tin account, password, email, gender lưu vào sở liệu Nhấn nút Back để trở giao diện hình Nhấn nút View thông tin từ sở liệu nạp hiển thị hình (Xem chương trình mẫu 2) Hình Hình Ks Trần Khánh Luân 111 Lập trình ứng dụng cho Mobile Hình Hình Chương trình mẫu Activity package buoi1.bai4; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class Buoi1_Bai4 extends Activity { /** Called when the activity is first created */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button registry = (Button)this.findViewById(R.id.registry); Ks Trần Khánh Luân 112 Lập trình ứng dụng cho Mobile Button btnview = (Button)this.findViewById(R.id.btnview); Button quit = (Button)this.findViewById(R.id.quit); registry.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Intent reg = new Intent(Buoi1_Bai4.this, Registry.class); startActivity(reg); } }); btnview.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Intent vie = new Intent(Buoi1_Bai4.this, ViewData.class); startActivity(vie); } }); quit.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub System.exit(0); } }); } @Override protected void onResume() { super.onResume(); } @Override protected void onPause() { super.onPause(); } @Override protected void onDestroy() { super.onDestroy(); } } Lớp Data package buoi1.bai4; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; Ks Trần Khánh Luân 113 Lập trình ứng dụng cho Mobile import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class Data extends SQLiteOpenHelper { // All Static variables // Database Version private static final int DATABASE_VERSION = 1; // Database Name private static final String DATABASE_NAME = "infosManager"; // Infos table name private static final String TABLE_CONTACTS = "infos"; // Infos Table Columns names private static final String KEY_ID = "id"; private static final String KEY_ACC = "acc"; private static final String KEY_PASS = "pass"; private static final String KEY_EMAIL = "email"; private static final String KEY_GENDER = "gender"; public Data(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } // Creating Tables @Override public void onCreate(SQLiteDatabase db) { String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_ACC + " TEXT," + KEY_PASS + " TEXT," + KEY_EMAIL + " TEXT," + KEY_GENDER + " TEXT" + ")"; db.execSQL(CREATE_CONTACTS_TABLE); } // Upgrading database @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Drop older table if existed db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); // Create tables again onCreate(db); Ks Trần Khánh Luân 114 Lập trình ứng dụng cho Mobile } // Them info moi void addInfo(Info info) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_ACC, info.getAcc()); values.put(KEY_PASS, info.getPass()); values.put(KEY_EMAIL, info.getEmail()); values.put(KEY_GENDER, info.getGender()); // Inserting Row db.insert(TABLE_CONTACTS, null, values); db.close(); // Closing database connection } // Getting single info Info getInfo(int id) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID, KEY_ACC, KEY_PASS, KEY_EMAIL, KEY_GENDER }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null); if (cursor != null) cursor.moveToFirst(); Info info = new Info(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4)); // return contact return info; } // Getting All Infos public List getAllInfo() { List infoList = new ArrayList(); // Select All Query String selectQuery = "SELECT * FROM " + TABLE_CONTACTS; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(selectQuery, null); // looping through all rows and adding to list if (cursor.moveToFirst()) { { Info info = new Info(); info.setID(Integer.parseInt(cursor.getString(0))); Ks Trần Khánh Luân 115 Lập trình ứng dụng cho Mobile info.setAcc(cursor.getString(1)); info.setPass(cursor.getString(2)); info.setEmail(cursor.getString(3)); info.setGender(cursor.getString(4)); // Adding contact to list infoList.add(info); } while (cursor.moveToNext()); } // return list return infoList; } // Updating single contact public int updateInfo(Info info) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_ACC, info.getAcc()); values.put(KEY_PASS, info.getPass()); values.put(KEY_EMAIL, info.getEmail()); values.put(KEY_GENDER, info.getGender()); // updating row return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", new String[] { String.valueOf(info.getID()) }); } // Deleting single contact public void deleteInfo(Info info) { SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_CONTACTS, KEY_ID + " = ?", new String[] { String.valueOf(info.getID()) }); db.close(); } // Getting Count public int getInfoCount() { String countQuery = "SELECT * FROM " + TABLE_CONTACTS; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); cursor.close(); // return count return cursor.getCount(); } } Ks Trần Khánh Luân 116 Lập trình ứng dụng cho Mobile Lớp Info package buoi1.bai4; public class Info { //private variables int _id; String _acc; String _pass; String _email; String _gender; // Empty constructor public Info(){ } // constructor public Info(int id, String acc, String pass, String email, String gender){ this._id = id; this._acc = acc; this._pass = pass; this._email = email; this._gender = gender; } // constructor public Info(String acc, String pass, String email, String gender){ this._acc = acc; this._pass = pass; this._email = email; this._gender = gender; } // getting ID public int getID(){ return this._id; } // setting id public void setID(int id){ this._id = id; } // getting acc public String getAcc(){ return this._acc; } // setting acc public void setAcc(String acc){ this._acc = acc; Ks Trần Khánh Luân 117 Lập trình ứng dụng cho Mobile } //getting pass public String getPass(){ return this._pass; } // setting pass public void setPass(String pass){ this._pass = pass; } //getting email public String getEmail(){ return this._email; } // setting email public void setEmail(String email){ this._email = email; } //getting gender public String getGender(){ return this._gender; } // setting gender public void setGender(String gender){ this._gender = gender; } } Lớp Registry package buoi1.bai4; import android.app.Activity; import android.os.Bundle; import android.widget.*; import android.view.*; import android.app.*; import android.content.DialogInterface; public class Registry extends Activity { /** Called when the activity is first created */ private Data db; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.registry); Button tvreg = (Button)this.findViewById(R.id.txreg); Button tvre = (Button)this.findViewById(R.id.txreset); Button tvback = (Button)this.findViewById(R.id.txback); Ks Trần Khánh Luân 118 Lập trình ứng dụng cho Mobile db = new Data(this); tvreg.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") public void onClick(View v) { // TODO Auto-generated method stub EditText edacc = (EditText)Registry.this.findViewById(R.id.ed1); String acc = edacc.getText().toString(); EditText edpass = (EditText)Registry.this.findViewById(R.id.ed2); String pass = edpass.getText().toString(); EditText edmail = (EditText)Registry.this.findViewById(R.id.ed4); String mail = edmail.getText().toString(); RadioButton radionam = (RadioButton)Registry.this.findViewById(R.id.rb1); RadioButton radionu = (RadioButton)Registry.this.findViewById(R.id.rb2); if(radionam.isChecked()==true) { String gender = radionam.getText().toString(); AlertDialog ad = new AlertDialog.Builder(Registry.this).create(); ad.setTitle("Alert"); ad.setMessage("Name: " + acc + "\r\n" + "Email: " + mail + "\r\n" + "Gender:" + gender); db.addInfo(new Info(acc, pass, mail, gender)); ad.setButton("Close",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { //Do Something dialog.cancel(); }}); ad.show(); } if(radionu.isChecked()==true) { \String gender = radionu.getText().toString(); AlertDialog ad = new AlertDialog.Builder(Registry.this).create(); ad.setTitle("Alert"); ad.setMessage("Name: " + acc + "\r\n" + "Email: " + mail + "\r\n" + "Gender:" + gender); db.addInfo(new Info(acc, mail, pass, gender)); ad.setButton("Close",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { //Do Something dialog.cancel(); }}); ad.show(); } Ks Trần Khánh Luân 119 Lập trình ứng dụng cho Mobile TÀI LIỆU THAM KHẢO CHÍNH [1] Lập trình Android/ Ths Trương Thị Ngọc Phượng, Nhà xuất Thời Đại, 2012 [2] Lập trình cho thiết bị di động/ GVC ThS Đoàn Hòa Minh, Khoa Công nghệ thông tin Truyền thông, Đại học Cần Thơ, 2012 [3] http://developer.android.com/reference/packages.html TÀI LIỆU THAM KHẢO KHÁC [1] Mobile Computing Principles Designing and Developing Mobile Applications with UML and XML/ Reza B’Fax – Cambidge University Press, 2005 [2] Programming Mobile Devies/ Tommi Mikkonen – John Wiley & Sons, 2007 [3] Beginning J2ME: From Novice to Professinal/ Jonathan Knudsen – Apress, US, 2005 [4] Programming Wireless Devices with the JavaTM2 Platform Micro Edition, Second Edition/ Roger Riggs – Addison Wesley, June 13, 2003 [5] Beginning Android/ Mark L Murphy, Apress, 2009 [6] http://basetut.com/category/lap-trinh-android/ [7] http://vi.wikipedia.org/wiki/Android Ks Trần Khánh Luân 120 [...]... chương trình Java cho các thiết bị di động khác nhau có thể có bộ vi xử lý và tập lệnh khác nhau (D) Tất cả các câu trả lời khác đều đúng Câu 13: Để thực hiện mong muốn “viết mã một lần và chạy cho nhiều platform”, không cần phải thay đổi mã cho các platform khác nhau, cho phép người lập trình ứng dụng Ks Trần Khánh Luân 14 Lập trình ứng dụng cho Mobile tạo ra các phần mềm ứng dụng cho nhiều platform... Hỗ trợ tải lên tập tin trong ứng dụng trình duyệt - Trình duyệt hỗ trợ tất cả hình ảnh GIF - Hỗ trợ cài đặt các ứng dụng vào bộ nhớ mở rộng - Adobe Flash hỗ trợ - Hỗ trợ cho các cao PPI hiển thị (lên đến 320 ppi), chẳng hạn như màn hình 4" 720p - Gallery cho phép người dùng xem các ngăn xếp hình ảnh bằng cách sử dụng cử chỉ zoom Ks Trần Khánh Luân 23 Lập trình ứng dụng cho Mobile Android 2.3 - 2.3.2... mạng di động và các lập trình viên nhiệt huyết được điều chỉnh và phân phối Android một cách tự do Ngoài ra, Android còn có một cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi Vào tháng 10 năm 2012, có khoảng 700.000 ứng dụng trên Android, và số lượt tải ứng dụng từ Google Play, cửa hàng ứng dụng chính của Android,... bị cầm tay sử dụng phần mềm nhận dạng khuôn mặt - Tự động đồng bộ của trình duyệt Chrome với bookmark của người sử dụng - Cách sử dụng phần dữ liệu trong các thiết lập cho phép người dùng thiết lập cảnh báo khi họ tiếp cận một giới hạn sử dụng nhất định, và vô hiệu hóa dữ liệu sử dụng khi giới hạn bị vượt quá - Khả năng tắt các ứng dụng đang sử dụng dữ liệu trong nền - Cải thiện ứng dụng máy ảnh với... có thể Thật tiết kiệm bộ nhớ RAM trong các ứng dụng Việc tiết kiệm năng lượng điện là vấn đế quan trọng, cần sử dụng các hàm Ks Trần Khánh Luân 15 Lập trình ứng dụng cho Mobile theo dõi rạng thái tiêu thụ điện để thay đổi hoạt động của ứng dụng Nếu trạng thái pin yếu được nhận biết, ta phải thực hiện việc bảo toàn dữ liệu kết nối mạng hay nội bộ và đóng ứng dụng sau khi cảnh báo (B) Bảo đảm dọn sạch... tạo ra ứng dụng có hiệu quả - Thật tiết kiệm bộ nhớ RAM trong các ứng dụng Bộ nhớ ROM và RAM được quản lý bởi một bộ phần cứng trên thiết bị di động Ngày nay, hầu hết các thiết bị di động, không có tập tin quản lý phần cứng (hard driver) Ks Trần Khánh Luân 11 Lập trình ứng dụng cho Mobile - Vì RAM và ROM thường cùng chia sẻ các phần cứng giống nhau, sự tiết kiệm dữ liệu bền vững hoặc dữ liệu điều khiển... đổi nhỏ cho các API và sửa lỗi Ks Trần Khánh Luân 22 Lập trình ứng dụng cho Mobile Hình 2.5 Nexus One, thiết bị đầu tiên mở màn chương trình Nexus của Google Android 2.2 - 2.2.3 - (API Level 8) - Froyo Ngày 20 tháng 5 năm 2010, SDK cho Android 2.2 (Froyo) đã được phát hành, dựa trên Linux kernel 2.6.32 Những thay đổi bao gồm: - Tối ưu hóa tốc độ, bộ nhớ, và hiệu suất - Cải thiện tốc độ ứng dụng bổ... phát triển tích hợp (IDE); Công cụ quản lý cần thiết; (B) Bộ biên tập mã nguồn (source code editor); Trình biên dịch (compiler) và/hoặc trình thông dịch (interpreter); Các công cụ tự động xây dựng ứng dụng (build automation tools); Trình gỡ lỗi (debugger) Ks Trần Khánh Luân 13 Lập trình ứng dụng cho Mobile (C) Môi trường phát triển tích hợp (IDE); Công cụ quản lý cần thiết; Công cụ mô hình hóa thiết... tập tin header), Javap (trình dịch ngược Java) (C) javac (bộ biên dịch Java), java (bộ thông dịch Java), appletviewer (trình thông dịch các applet), javadoc (tạo tài liệu HTML từ mã nguồn), jdb (java debuger), Javhah (tạo tập tin header), Javap (trình dịch ngược Java) (D) Tất cả các câu khác đều sai Ks Trần Khánh Luân 16 Lập trình ứng dụng cho Mobile CHƯƠNG 2: CƠ SỞ PHÁT TRIỂN ỨNG DỤNG (Lý thuyết 4 tiết;... các công ty công nghệ Ks Trần Khánh Luân 17 Lập trình ứng dụng cho Mobile 2.1.2 Tóm tắt lịch sử phát triển của Android Tổng công ty Android (Android, Inc.) được thành lập tại Palo Alto, California vào tháng 10 năm 2003 bởi Andy Rubin (đồng sáng lập công ty Danger), Rich Miner (đồng sáng lập Tổng công ty Viễn thông Wildfire), Nick Sears (từng là Phó giám đốc T -Mobile) , và Chris White (trưởng thiết kế và ... chạy cho nhiều platform”, không cần phải thay đổi mã cho platform khác nhau, cho phép người lập trình ứng dụng Ks Trần Khánh Luân 14 Lập trình ứng dụng cho Mobile tạo phần mềm ứng dụng cho nhiều... 1.1 Ảnh minh họa cho thiết bị di động 1.1.2 Lập trình di động (Mobile programming) Kiến trúc tổng quát điện thoại di động lập trình: Ks Trần Khánh Luân Lập trình ứng dụng cho Mobile Hình 1.2 Kiến... Luân 33 Lập trình ứng dụng cho Mobile - Notification Mamager: Cung cấp chế cố định quy củ cho việc gửi thông báo đến người dùng - Content Provider: Cho phép ứng dụng chia sẻ liệu ứng dụng - Resource