Professional Documents
Culture Documents
Phát triển ứng dụng trên thiết bị di
Phát triển ứng dụng trên thiết bị di
• Android ra đời lần đầu tiên bởi Andy Rubin vào những năm đầu tiên của
thế kỷ 21 và là HĐH cho điện thoại di động.
• Năm 2005, Google mua lại công ty android
• version 1.0 ,1.5, 1.6, 2.0, 2.1, 2.2, 2.3, 3.0 ,4.2… và hiện tại là 10 Quiche
• Được xây dựng trên nền tảng của Linux và Oracle’s (formerly Sun
Microsystems’s) Java
LỊCH SỬ PHÁT TRIỂN CỦA ANDROID
ĐẶC ĐIỂM CỦA ANDROID
• Tầng ứng dụng: phone, SMS, email, trình duyệt, danh bạ, bản đồ….
• Tầng Application Framework: tập các dịch vụ của hệ thống có thể được truy
cập thông qua các API
• Tập đối tượng View (giao diện).
• Các đối tượng ContentProvider : cho phép truy cập dữ liệu của các ứng
dụng khác.
• Quản lý tài nguyên, thông báo.
• Trình quản lý các đối tượng Activity dùng để quản lý vòng đời của các
ứng dụng
KIẾN TRÚC CỦA ANDROID
• Tầng Linux kernel: hoạt động như một lớp trừu tượng giữa phần
cứng và phần mềm. Tầng này gồm: Security, Memory management,
Process management, Network stack, Driver model
MÔI TRƯỜNG LẬP TRÌNH
• NNLT Java được Sun Microsystems giới thiệu vào tháng 6 – 1995
• Được xây dựng dựa trên nền tảng của C và C++
• Java là ngôn ngữ vừa biên dịch vừa thông dịch
• Ngày nay Java được phát triển rộng rãi để lập trình không chỉ
trên máy tính mà còn trên các thiết bị khác như di động, PDA…
ĐẶC TRƯNG CỦA JAVA
• Byte: dung lượng 8 bit, có miền giá trị -128 -> 127, giá trị mặc
định là 0
• char: kích thước 2 byte, biểu diễn ký tự hoặc số nguyên dương,
giá trị mặc định là 0
• Boolean: biểu diễn 2 trạng thái true, false, giá trị mặc định là false
• Short: số nguyên, kích thước 2 byte
• Int: kiểu số nguyên, kích thước 4 byte
CÁC KIỂU DỮ LIỆU CƠ BẢN
• Biến là vùng nhớ dùng để lưu trữ các giá trị của chương trình. Mỗi
biến gắn liền với một kiểu dữ liệu và một định danh duy nhất gọi là
tên biến.
• Cách khai báo
• <kiểu_dữ_liệu> <tên_biến>;
• <kiểu_dữ_liệu> <tên_biến> = <giá_trị>;
• Gán giá trị cho biến
• <tên_biến> = <giá_trị>;
CÂU LỆNH IF
• If (điều kiện)
• Câu lệnh 1 ; (khối lệnh 1)
• Else
• câu lệnh 2; (khối lệnh 2)
• Hoạt động: nếu điều kiện kiểm tra là đúng thì thực hiện câu
lệnh 1 bỏ qua câu lệnh 2, Nếu điều kiện sai thì thực hiện câu
lệnh 2, bỏ qua câu lệnh 1.
CÂU LỆNH SWITCH … CASE
• switch (<biến>)
• {
• case <giátrị_1>:
• <khối_lệnh_1>;
• break;
• ….
• case <giátrị_n>:
• <khối_lệnh_n>;
• break;
• default:
• <khối lệnh default>;
• }
CÂU LỆNH FOR
• for (khởi_tạo_biến_đếm;đk_lặp;tăng_biến)
• {
• <khối _lệnh>;
• }
CÂU LỆNH WHILE
• while (điều_kiện_lặp)
• {
• khối _lệnh;
• }
• Khối lệnh sẽ được lặp đi lặp lại nếu điều kiện trong lệnh while còn đúng
và sẽ dừng lại khi điều kiện sai
CÂU LỆNH DO .. WHILE
• do
• {
• khối_lệnh;
• } while (điều_kiện);
LỚP (CLASS)
• Lớp được xem như một khuôn mẫu (template) của đối tượng (Object).
Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các
phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các
phương thức của lớp.
• Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện
của lớp (class instance).
KHAI BÁO/ĐỊNH NGHĨA LỚP
• class <ClassName>
• {
• <kiểu dữ liệu> <field_1>;
• <kiểu dữ liệu> <field_2>;
• constructor
• method_1
• method_2
• }
KHAI BÁO/ĐỊNH NGHĨA LỚP
• Hàm hay phương thức (method) trong Java là khối lệnh thực hiện các
chức năng, các hành vi xử lý của lớp lên vùng dữ liệu.
• Khai báo phương thức:
• <Tiền tố> <kiểu trả về> <Tên phương thức> (<danh sách đối số>)
• {
• <khối lệnh>;
• }
LẬP TRÌNH ANDRIOD
• Các hệ điều hành trên mobi phổ biến hiện nay: IOS, Window
phone, … Android là HĐH phổ biến nhất
• Lập trình sử dụng Android Studio chứa các hàm API cho các
công cụ cần thiết và sử dụng ngôn ngữ lập trình Java
CÁC THÀNH PHẦN TRONG ỨNG DỤNG ANDROID
• Activity: là nền của 1 ứng dụng. Khi khởi động 1 ứng dụng
Android nào đó thì bao giờ cũng có 1 main Activity được gọi,
hiển thị màn hình giao diện của ứng dụng cho phép người
dùng tương tác.
• Service: là thành phần chạy ẩn trong Android. Service sử dụng
để update dữ liệu, đưa ra các cảnh báo (Notification) và không
bao giờ hiển thị cho người dùng thấy.
CÁC THÀNH PHẦN TRONG ỨNG DỤNG ANDROID
• Content Provider: được sử dụng để quản lý và chia sẻ dữ liệu giữa các
ứng dụng.
• Intent: là nền tảng để truyền tải các thông báo. Intent được sử dụng để
gửi các thông báo đi nhằm khởi tạo 1 Activity hay Service để thực hiện
công việc mong muốn.
• Broadcast Receiver: thành phần thu nhận các Intent bên ngoài gửi tới.
• Notification: đưa ra các cảnh báo mà không làm cho các Activity phải
ngừng hoạt động.
VÒNG ĐỜI CỦA MỘT ỨNG DỤNG ANDROID
• Foreground process: là process của ứng dụng hiện thời đang được người dùng tương
tác.
• Visible process: là process của ứng dụng mà activity đang hiển thị đối với người dùng
(onPaused() của activity được gọi).
• Service process: là Service đang running.
• Background process: là process của ứng dụng mà các activity của nó ko hiển thị với
người dùng (onStoped() của activity được gọi).
• Empty process: process không có bất cứ 1 thành phần nào active.Theo chế độ ưu tiên
thì khi cần tài nguyên,Android sẽ tự động kill process, trước tiên là các empty process.
VÒNG ĐỜI CỦA MỘT ỨNG DỤNG ANDROID
VÒNG ĐỜI CỦA MỘT ỨNG DỤNG ANDROID
• - FrameLayout: Layout đơn giản nhất, thêm các thành phần con vào góc trên bên trái của
màn hình.
• - LinearLayout: thêm các thành phần con theo 1 chiều nhất định (ngang hoặc dọc). Đây
là layout được sử dụng nhiều nhất.
• - RelativeLayout: thêm các thành phần con dựa trên mối quan hệ với các thành phần
khác hoặc với biên của layout.
• - TableLayout: thêm các thành phần con dựa trên 1 lưới các ô ngang và dọc.
• - AbsoluteLayout: thêm các thành phần con dựa theo tọa độ x, y.
CÁC VIEW
• View là thành phần chính để tạo nên một file Layout và được kế thừa từ lớp
android.view.View, các View thường gặp:
• Button
• ListView
• TextView
• EditText
• ImageView
• ImageButton
• CheckBox
• RadioButton
CÁC VIEWGROUP
• ViewGroup chính là view cha, có thể bao bọc các View/ViewGroup khác ở bên
trong.Mục đích của ViewGroup thì định dạng những thuộc tính mà các view chứa trong
nó phải dựa vào đó mà tuỳ chỉnh theo và sẽ chịu ảnh hưởng theo
• ViewGroup được kết thừa từ lớp android.view.ViewGroup, Các ViewGroup thường
gặp:
• FrameLayout
• LinearLayout
• TableLayout
• GridLayout
• RelativeLayout
IMAGEVIEW
• View này dùng để cho người dùng nhập văn bản, số…
• android:hint : thuộc tính này nhằm chèn một đoạn văn mờ ở trong EditText nhằm gợi ý
cho người dùng biết sẽ làm gì
• android:layout_margin : thuộc tính dùng để canh lề cho view so với màn hình hoặc view
khác
BUTTON
• RadioButton Là view cho phép người dùng chọn 1 cái duy nhất trong các lựa chọn . Khi
thiết kế phải được đặt trong RadioGroup
• Check box là View cho phép người dùng lựa chọn 1 hay nhiều lựa chọn
CÁC PHƯƠNG THỨC THƯỜNG DÙNG TRONG RADIOBUTTON VÀ CHECK BOX
• phương thức setChecked, dùng để thiết lập checked. Nếu gọi setChecked(true) tức là cho
phép control được checked, còn gọi setChecked(false) thì control sẽ bị unchecked.
• phương thức isChecked, kiểm tra xem control có được checked hay không. Nếu có
checked thì trả về true ngược lại trả về false
CÁC PHƯƠNG THỨC THƯỜNG DÙNG TRONG RADIOBUTTON VÀ CHECK BOX
group.clearChecked();
CÁC PHƯƠNG THỨC THƯỜNG DÙNG TRONG RADIOBUTTON VÀ CHECK BOX
Kết quả
BÀI TÂP 2
• Nhập 2 số:
- Thiết kế giao diện như hình vẽ
a b
- Liên kết các View sang file . Java
Kết quả - Khi click vào nút Tính toán thì kết quả tổng hiệu,
Tổng
tích, thương của 2 số a,b được hiển thị ở ô kết
Hiệu Kết quả
quả tương ứng nếu phép toán được tích chọn
Tích Kết quả
Thương
Kết quả
Tính toán
BÀI TẬP 3 - Thiết kế giao diện như hình vẽ
- Khi click vào RadioButton nào thì kết quả hiển thị
tương ứng năm âm hoặc năm dương. Biết cách
chuyển từ năm âm sang dương như sau:
• Nhập 1 số:
Kết quả
TẠO PROJECT MỚI
• Clicking Start a new Android Studio project. Hoặc selecting File > New > New
Project from the main menu.
• Choose your project click Next
• Configure your project: Name of your project, Package name, Save location, Language,
Minimum API level , This project will support instant apps, Use AndroidX artifacts
XỬ LÝ SỰ KIỆN TRONG ANDROID
• Sự kiện trong Android: là việc người dùng tương tác với các giao diện, mà giao diện là
do các view tạo thành. Có nhiều sự kiện khác nhau như: sự kiện click vào view, sự kiện
click và giữ lâu, sự kiện scroll view…
• Event Listeners là một interface. Event Listeners được sử dụng để đăng ký sự kiện cho
các thành phần trong UI. (Đăng ký sự kiện)
• Event Handlers – Là phương thức xử lý khi phát sinh sự kiện. (Xử lý sự kiện)
MỘT SỐ SỰ KIỆN THƯỜNG GẶP TRONG ANDROID
Event Handler Event Listener Name
OnClickListener() Đăng ký sự kiện khi người dùng hoặc click hoặc chạm (touche) hoặc focuse trên bất ký widget như button,
onClick()
text, image vv. Chúng ta sẽ sử dụng phương onClick() để xử lý sự kiện.
OnLongClickListener() Đăng ký sự kiện khi người dùng hoặc click hoặc chạm (touche) hoặc focus trên bất ký widget
onLongClick()
như button, text, image vv. trong một hoặc nhiều giây. Chúng ta sẽ sử dụng phương onLongClick() để xử lý sự kiện.
OnFocusChangeListener() Sự kiện phát sinh khi người dùng focus trên widget và nhấn (presse) hoặc thả (release) một phím
onKey()
trên thiết bị.
onTouch() OnTouchListener() Sự kiện phát sinh khi người dùng nhấn phím, nhả phím, hoặc bất kỳ cử chỉ chuyển động trên màn hình.
onMenuItemClick() OnMenuItemClickListener()Sự kiện phát sinh khi người dùng chọn một mục trong menu.
OnCreateContextMenuItemListener() Sự kiện phát sinh khi người dùng chọn một mục trong menu ngữ cảnh (Context
onCreateContextMenu()
Menu)
LẬP TRÌNH XỬ LÝ SỰ KIỆN
• Tạo View trong file Layout
• Import các thư viện file java
• import android.view.View;
• import android.widget.tên_View;
• tên_đối_tượng.setOnClickListener(new View.OnClickListener() {
• @Override
• public void onClick(View view) {
• ………………………….. Các câu lệnh
• }
• });
• import android.support.v7.app.AppCompatActivity;
• import android.os.Bundle;
• import android.util.Log;
• import android.view.View;
• import android.widget.Button;
• import android.widget.EditText;
INTENT
• Intent có thể được dùng để kết nối các thành phần trong ứng dụng Android. Trong quá trình
kết nối, nó cũng có thể yêu cầu thành phần đó thực hiện một tác vụ được định trước.
• Explicit Intent – Intent dạng tường minh: khi tạo một đối tượng Intent, phai chỉ định rõ
và truyền trực tiếp tên thành phần đích vào intent.
• Implicit Intent – Intent không tường minh:Thay vì trong intent Android được chỉ định
sẵn một Activity nào đó thực hiện, thì sẽ chỉ truyền vào action và gửi cho Android.
Android sẽ dựa vào action đó mà lọc những thành phần nào đã đăng kí action đó gọi ra.
START ANOTHER ACTIVITY
• Mục đích: mở một activity khác khi nút lệnh được nhấn từ MainActivity
• Các bước thực hiện:
• Mở file app > java > com.example.myfirstapp > MainActivity, tạo phương thức
sendMessage() như sau:
• public void sendMessage(View view) {
• // Do something in response to button
• }
CÁC BƯỚC THỰC HIỆN (TIẾP)
• Mở file activity_main.xml sau đó chọn button cần điều khiển: chọn thuộc tính
onClick là phương thức sendMessage
• Thuộc tính onClick được gọi đến phương thức thỏa mãn: quyền truy cập: Public Kiểu:
void; tham số: View.
• Viết nội dung phương thức sendMessage
• Phương thức putExtra() cho phép gửi 1 chuỗi đến intent.
• String message;
• intent.putExtra(EXTRA_MESSAGE, message);
CREATE THE SECOND ACTIVITY
• In the Project window, right-click the app folder and select New > Activity > Empty
Activity.
• In the Configure Activity window, enter the Name of second Activity. Leave all other
properties set to their defaults and click Finish.
• Display the message that was passed by the first activity:
• Intent intent = getIntent();
• String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
BUILD AN INTENT
• An Intent is an object that provides runtime binding between separate components, such
as two activities
• Mở 1 intent
• public void sendMessage(View view) {
• Intent intent = new Intent(this, DisplayMessageActivity.class);
• EditText editText = (EditText) findViewById(R.id.editText);
• String message = editText.getText().toString();
• intent.putExtra(EXTRA_MESSAGE, message);
• startActivity(intent);
• }
INTENT KHÔNG TƯỜNG MINH
• https://developer.android.com/guide/topics/sensors/sensors_overview
CÁC LỚP, GIAO DIỆN GÓI ANDROID.HARDWARE
• Người lập trình có thể truy cập các cảm biến và có được dữ liệu cảm biến thô bằng
cách sử dụng khung cảm biến Android. Khung cảm biến là một phần của gói
android.hardware và bao gồm các lớp và giao diện sau:
• SensorManager: lớp này để tạo một thể hiện của dịch vụ cảm biến, cung cấp các
phương thức khác nhau để truy cập và liệt kê các cảm biến, đăng ký và không đăng ký
sự kiện cảm biến và thu thập thông tin định hướng.
• Cung cấp một số hằng số cảm biến được sử dụng để báo cáo độ chính xác của cảm
biến, đặt tốc độ thu thập dữ liệu và hiệu chỉnh cảm biến, cho phép xác định khả năng
của cảm biến.
CÁC LỚP, GIAO DIỆN GÓI ANDROID.HARDWARE
• Sensor: lớp này để tạo một đối tượng sự kiện cảm biến, cung cấp thông
tin về một sự kiện cảm biến, bao gồm các thông tin sau: dữ liệu cảm biến
thô, loại cảm biến tạo ra sự kiện, độ chính xác của dữ liệu và thời gian
cho sự kiện
• SensorEventListener: sử dụng giao diện này để tạo hai phương thức gọi,
nhận thông báo (sự kiện cảm biến) khi giá trị cảm biến thay đổi hoặc khi
độ chính xác của cảm biến thay đổi.
GIÁM SÁT SỰ KIỆN CẢM BIẾN
• Broadcast Receiver phản hồi các thông báo phát ra từ các ứng dụng khác hoặc từ chính
hệ thống. Những thông báo này là các event hoặc intent. Broadcast Receiver thông dịch
thông tin và khởi tạo hành động thích hợp.
• 2 bước để làm Broadcast Receiver làm việc cho các Intent:
• Tạo Broadcast Receiver.
• Đăng ký Broadcast Receiver.
CÁC BƯỚC THỰC HIỆN