You are on page 1of 92

PHÁT TRIỂN ỨNG DỤNG

TRÊN THIẾT BỊ DI ĐỘNG


30T LT + 30H TH

HÌNH THỨC THI: BÀI TẬP LỚN


NỘI DUNG MÔN HỌC

• Giới thiệu về hệ điều hành Android


• Ôn tập khái quát về lập trình Java
• Cài đặt phần mềm
• Xây dựng các ứng dụng trên android
GIỚI THIỆU VỀ ANDROID
• Android là hệ điều hành trên điện thoại di động, tablet (và hiện nay là cả
trên một số đầu phát HD, HD Player, TV) phát triển bởi Google và dựa
trên nền tảng Linux.
• Trước đây, Android được phát triển dựa trên nền tảng của Linux do
công ty liên hợp Android phát hành (sau đó được Google mua lại vào
năm 2005).
• Android cung cấp framework ứng dụng ở dạng component
• Hỗ trợ trình duyệt web, đồ họa 2D – 3D, các định dạng đa phương tiện,
bluetoot
GIỚI THIỆU VỀ ANDROID

• Android được gọi là hệ điều hành mở


• Android cung cấp một bộ công cụ phát triển mạnh nhiều tool
và có thể debug dễ dàng ngay cả với máy thật kết hợp với IDE
và Android studio
• Viết ứng dụng cho Android dựa trên ngôn ngữ Java
LỊCH SỬ PHÁT TRIỂN CỦA ANDROID

• 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

• Được xây dựng trên nền tảng của mã nguồn mở


• Không chỉ là hệ điều hành cho các thiết bị di động mà còn là
HĐH cho cả các thiết bị khác có sử dụng Internet.
• Là HĐH dễ sử dụng và cho phép người dùng dễ dàng publish
các ứng dụng.
KIẾN TRÚC CỦA ANDROID

• Android có kiến trúc 4


tầng
KIẾN TRÚC 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 Libraries – Runtime


• Cung cấp các thư viện Media dựa trên thư viện PacketVideo’s OpenCORE.
• Cung cấp hệ quản trị CSDL SQLite

• 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

• Phần mềm JDK (Java)


• Phần mềm tạo máy ảo Genymotion
• Android Studio là một phần mềm miễn phí (IDE) được phát
triển bởi Google, giúp chúng ta phát triển các ứng dụng
Android một cách nhanh chóng và hiệu quả nhất.
ÔN TẬP VỀ JAVA

• Lịch sử phát triển


• Kiến trúc tổng quát của 1 chương trình Java
• Các toán tử và cấu trúc dữ liệu cơ bản
• Các cấu trúc lệnh của Java
LỊCH SỬ PHÁT TRIỂN CỦA JAVA

• 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

• Hướng đối tượng


• Đơn giản
• Độc lập với phần cứng và hệ điều hành
• Bảo mật
• Phân tán
• Đa luồng
• Linh động và mạnh mẽ
ĐẶC TRƯNG CỦA JAVA

• Hướng đối tượng


• Đơn giản
• Độc lập với phần cứng và hệ điều hành
• Bảo mật
• Phân tán
• Đa luồng
• Linh động và mạnh mẽ
CẤU TRÚC CỦA MỘT CHƯƠNG TRÌNH JAVA

• Package tên gói ; // khai báo gói


• Import java.*.*; // khai báo thư viện
• Class tên lớp // khai báo lớp
• { kiểu biến tên biến; // khai báo biến
• public kiểu tên phương thức () // khai báo phương thức
• { các câu lệnh;
•}
•}
CÁC KIỂU DỮ LIỆU CƠ BẢN

• 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

• Float: số thực, kích thước 4 byte


• Double: kiểu số thực có kích thước 8 byte
• Long : số nguyên có kích thước 8byte
CÁC KIỂU DỮ LIỆU ĐỐI TƯỢNG

• Array : mảng dữ liệu cùng kiểu


• Class: lớp đối tượng do người lập trình định nghĩa có
thuộc tính, phương thức
• Interface: lớp giao tiếp do người lập trình định nghĩa,
chứa các phương thức của giao tiếp.
CÁC PHÉP TOÁN

• Phép toán số học : +,-,*,/, %, ++, --, +=, -=, *=,/=, %=


• Phép toán trên bit: ~ (not), & (and), | (or), ^ (xor), >>
(dịch phải) , << (dịch trái)
• Phép toán quan hệ: ==, !=, >,>=, <, <=
• Phép toán logic: &&(and), || (or), ^ (xor), ! (not)
• Phép gán : =
CẤU TRÚC LỆNH CỦA JAVA

• Câu lệnh rẽ nhánh:


• Câu lệnh if
• Câu lệnh switch
• Câu lệnh lặp:
• Câu lệnh for
• Câu lệnh while
• Câu lệnh do .. while
KHAI BÁO BIẾ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

• class: là từ khóa của java


• ClassName: là tên đặt cho lớp
• field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu
của lớp.
• constructor: là sự xây dựng, khởi tạo đối tượng lớp.
• method_1, method_2: là các phương thức/hàm thể hiện các thao tác
xử lý, tác động lên các thành phần dữ liệu của lớp.
TẠO ĐỐI TƯỢNG CỦA LỚP

• ClassName objectName = new ClassName();


• Thuộc tính của lớp: Vùng dữ liệu (fields) hay thuộc tính (properties) của
lớp được khai báo bên trong lớp như sau:
• class <ClassName>
• {
• // khai báo những thuộc tính của lớp
• <tiền tố> <kiểu dữ liệu> field1;
• }
QUYỀN TRUY XUẤT CỦA CÁC ĐỐI TƯỢNG

• public: có thể truy xuất từ tất cả các đối tượng khác


• private: một lớp không thể truy xuất vùng private của 1 lớp
khác.
• protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp
đó và những lớp dẫn xuất từ lớp đó truy cập đến.
HÀM - PHƯƠNG THỨC LỚP (METHOD)

• 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

• Activity bao gồm 4 state:


- active (running):Activity đang hiển thị trên màn hình (foreground).
- paused:Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus).
- stop: Activity bị thay thế hoàn toàn bởi Activity mới sẽ tiến đến trạng thái stop
- killed: Khi hệ thống bị thiếu bộ nhớ, nó sẽ giải phóng các tiến trình theo nguyên tắc ưu
tiên. Các Activity ở trạng thái stop hoặc paused cũng có thể bị giải phóng và khi nó được
hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái
trước đó.
VÒNG ĐỜI CỦA MỘT ỨNG DỤNG ANDROID

• Entire lifetime: Từ phương thức onCreate( ) cho tới onDestroy( )


• Visible liftetime: Từ phương thức onStart( ) cho tới onStop( )
• Foreground lifetime: Từ phương thức onResume( ) cho tới onPause( )
• Khi xây dựng Actitvity cho ứng dụng cần phải viết lại phương thức
onCreate( ) để thực hiện quá trình khởi tạo. Các phương thức khác có
cần viết lại hay không tùy vào yêu cầu lập trình.
CẤU TRÚC MỘT PROJECT
CẤU TRÚC MỘT PROJECT
CẤU TRÚC MỘT PROJECT
• Thư mục src chứa source code ứng dụng. Gồm các package và các class.
• Thư mục gen chứa các file tự động phát sinh (mà thường gặp nhất là R.class)
• Thư mục res để chứa các resource dùng trong ứng dụng (thông qua ID)
• Thư mục assets chứa các resource file mà ứng dụng cần dùng (dưới dạng file)
• File Manifest là file khai báo thông tin về ứng với hệ thống (như ứng dụng gồm
những màn hình nào, có service nào… xin các quyền gì, phiên bản bao nhiêu, dùng từ
SDK phiên bản nào…)
• Ngoài ra còn có file thư viện.
THIẾT KẾ GIAO DIỆN TRÊN ANDROID

• Trong Android, dùng Activity để hiển thị màn hình.


• Mỗi activity sẽ chứa các View theo dạng cấu trúc cây, nghĩa là
một Layout gốc chứa các view/layout con bên trong hoặc chỉ
có 1 view duy nhất. (lưu ý Layout cũng là một view nhé)
• Có thể thiết kế giao diện trong code java hoặc trong file xml
trong thư mục layout.
MỐI LIÊN HỆ GIỮA ACTIVITY VÀ LAYOUT
CÁC LAYOUT

• - 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

• Là View dùng để hiển thị hình ảnh


• Các thuộc tính thường dùng:
• android:layout_gravity : canh lề cho view so với kích thước màn hình hoặc
viewGroup
• android:src : đường dẫn hình ảnh
• android:layout_width/height: chiều cao và chiều rộng của View
EDITTEXT

• 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

• Là View dùng để bắt các sự kiện Click


• Các thuộc tính thường dùng:
• android:id="@+id/Tên_button"
• android:layout_gravit"
• android:text
• android:layout_width
• android:layout_height
RADIOBUTTON VÀ CHECK BOX

• 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

• hàm getCheckedRadioButtonId() : hàm này trả về Id của RadioButton nằm trong


RadioGroup 1 được checked. Dựa vào Id này bạn so sánh để biết được trên giao diện
người sử dụng đang checked lựa chọn nào.
CÁC PHƯƠNG THỨC THƯỜNG DÙNG TRONG RADIOBUTTON VÀ CHECK BOX

• Kiểm tra trực tiếp RadioButton đó có được checked hay không?

Để xóa bỏ checked trong group, ta dùng lệnh:

group.clearChecked();
CÁC PHƯƠNG THỨC THƯỜNG DÙNG TRONG RADIOBUTTON VÀ CHECK BOX

• Thiết lập trạng thái check: checkBox.setChecked(true);


• Bắt sự kiện thay đổi trạng thái:
• checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
• @Override
• public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
• //Code khi trạng thái check thay đổi

• }
• });
CÁC PHƯƠNG THỨC THƯỜNG DÙNG TRONG RADIOBUTTON VÀ CHECK BOX

• Bắt sự kiện Click:


• checkBox.setOnClickListener(new View.OnClickListener() {
• @Override
• public void onClick(View view) {
• ………………………………….
• }
• });
BÀI TẬP

Nhập số n 1- Thiết kế giao diện như hình vẽ


2- Liên kết các View EditText, RadioButton,
Edit text Button, TextView với file .java
3- Viết hai hàm tính tổng
o Tính tổng tổng = 1 +2 +3 +4 +… + n
o Tính tích Và hàm tính tích:
tích = 1.2.3.4….n
4- Gọi sự kiện trên Button
Thực hiện 5- Kiểm tra radioButton nào được chọn 
hiển thị kết quả

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ố:

Chon hiển thị:


o Năm âm lịch
o Năm dương lịch

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.

onFocusChange() OnFocusChangeListener() Sự kiện phát sinh khi widget mất focus.

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ạo đối tượng điều khiển


• Tên_View tên_đối_tượng = (Tên_View) findViewById(R.id.View_id);

• Đăng ký (gán) một sự kiện Onlick vào trong một View


• tên_đối_tượng.setOnClickListener(new View.OnClickListener()

• Viết hàm void onClick(View view)


FORMAT

• 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.

• Các thành phần cơ bản của một Intent:


• Actions: Là những thứ mà Intent cần thực thi, chẳng hạn như quay số điện thoại, mở URL hoặc
chỉnh sửa dữ liệu. Một action đơn giản là một String mô tả cho tác vụ cần thực hiện.Ví dụ:
ACTION_VIEW, ACTION_EDIT, ACTION_MAIN…
• Data: Đây chính là dữ liệu để intent hoạt động. Nó được biểu diễn dưới dạng Uniform Resource
Identifier(Uri) – một kiểu định danh cho một tài nguyên cụ thể. Kiểu của Data yêu cầu (nếu có)
tùy thuộc vào action.
PHÂN LOẠI INTENT

• 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

• Intent intent = new Intent (Intent.ACTION_VIEW, Uri.parse(“www.google.com"));


• startActivity(intent);
• Toast.makeText(this,“ban nhap sai mat khau",Toast.LENGTH_SHORT).show();
LẬP TRÌNH VỚI CÁC SENSOR
• Hầu hết các thiết bị hỗ trợ Android đều có cảm biến tích hợp
• Android hỗ trợ ba loại cảm biến:
• Cảm biến chuyển động: Những cảm biến này đo lực gia tốc và lực quay dọc theo ba trục.
Danh mục này bao gồm gia tốc kế (accelerometers), cảm biến trọng lực (gravity sensors), con
quay hồi chuyển (gyroscopes) và cảm biến vectơ quay rotational vector sensors .
• Cảm biến môi trường: Những cảm biến này đo các thông số môi trường khác nhau, chẳng
hạn như nhiệt độ và áp suất không khí xung quanh, độ chiếu sáng và độ ẩm. Danh mục này
bao gồm áp kế barometers, quang kế photometers,và nhiệt kế, thermometers.
• Cảm biến vị trí:Những cảm biến này đo vị trí vật lý của một thiết bị. Danh mục này bao gồm
cảm biến định hướngorientation sensors và từ kế magnetometers.
CÁC BƯỚC THỰC HIỆN

• Xác định cảm biến nào có sẵn trên thiết bị.


• Xác định các khả năng của một cảm biến riêng lẻ, chẳng hạn như phạm
vi tối đa, nhà sản xuất, yêu cầu năng lượng và độ phân giải của nó.
• Có được dữ liệu cảm biến thô và xác định tốc độ tối thiểu thu được dữ
liệu cảm biến.
• Đăng ký và hủy đăng ký sự kiện theo dõi thay đổi cảm biến.
TABLE 1. SENSOR TYPES SUPPORTED BY THE ANDROID PLATFORM.

• 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

• Là cách mà người lập trình có được dữ liệu cảm biến thô.


• Một sự kiện cảm biến xảy ra mỗi khi cảm biến phát hiện ra sự thay đổi trong các thông
số mà nó đang đo.
• Một sự kiện cảm biến cung cấp bốn thông tin: tên của cảm biến đã kích hoạt sự kiện,
dấu thời gian cho sự kiện, độ chính xác của sự kiện và dữ liệu cảm biến thô đã kích
hoạt sự kiện.
CÁC BƯỚC LẬP TRÌNH

• Bước 1: Truy cập vào cảm biến


• sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
• Liệt kê các cảm biến có trong thiết bị:
• List<Sensor> deviceSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
• Bước 2: Gọi tên sensor cần sử dụng:
• Sensor tên_sensor = sensorManager.getDefaultSensor(Sensor.Kiểu_sensor);
CÁC BƯỚC LẬP TRÌNH

• Kiểm tra sensor có tồn tại không:


• if(tên_Sensor == null) {
• Log.e(TAG, " sensor not available.");
• finish(); // Close app
• }
• Bước 3: Đăng ký một Listener:
CÁC BƯỚC LẬP TRÌNH

• Bước 3: Đăng ký một Listener:


• SensorEventListener ss1Listener = new SensorEventListener()

• ss.registerListener(ss1Listener,ss1, tốc độ lấy mẫu);

• Bước 4: Sử dụng dữ liệu thô


• Đối tượng SensorEvent, tồn tại trong phương thức onSensorChanged(), có một mảng values chứa tất cả các dữ liệu
thô, được tạo ra bởi các cảm biến gắn liền với nó.
SERVICE TRONG ANDROID
• Một Service là một thành phần mà chạy trong Background để thực hiện các hoạt động
mà không cần tương tác với người dùng và nó làm việc ngay cả khi nếu ứng dụng bị hủy.
Về cơ bản, một Service nhận hai trạng thái
• Started: Một Service được bắt đầu (started) bằng việc gọi startService(). Khi đã được
bắt đầu, một Service có thể chạy ngầm định trong Background, ngay cả khi thành phần
mà bắt đầu nó đã bị hủy.
• Bound: Một Service được gắn kết (bound) khi một Component kết nối tới nó bởi việc
gọi bindService(). Một bound service cung cấp một giao diện Client-Server cho phép các
thành phần tương tác với Service đó, gửi yêu cầu, nhận kết quả, và có thể thực hiện
một số tiên trình khác với Interprocess Communication (IPC)
BROADCAST RECEIVER TRONG ANDROID

• 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

• Create an instance of BroadcastReceiver.


• BroadcastReceiver br = new MyBroadcastReceiver();
• Create an IntentFilter and register the receiver:
• IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
• filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);
• this.registerReceiver(br, filter);
• To stop receiving broadcasts
SEND SMS TRONG ANDROID

• Send SMS trong Android có 2 cách để thực hiện:


• Dùng lớp SmsManager: cho phép thiết lập các thông số khác nhau và do đó có thể gửi
tin nhắn một cách linh hoạt theo ý muốn
• Dùng Intent: chỉ đơn giản là mở một ứng dụng SMS khác trong máy ra rồi để người
dùng tự thực hiện
CÁC BƯỚC THỰC HIỆN DÙNG LỚP SMSMANAGER

• Xin quyền gửi SMS:


• Trong androidmanifest:
• <uses-permission android:name="android.permission.SEND_SMS"/>
• Trong java code: ActivityCompat.requestPermissions(this,
• new String[]{Manifest.permission.SEND_SMS},MY_PERMISSIONS);
• Sử dụng SmsManager API trong Android:
• SmsManager smsManager = SmsManager.getDefault();
• smsManager.sendTextMessage("phoneNo", null, "sms message", null, null);
CÁC BƯỚC THỰC HIỆN DÙNG INTENT

• Xin quyền gửi SMS:


• <uses-permission android:name="android.permission.SEND_SMS"/>
• Gọi Intent:
• Intent sendIntent = new Intent(Intent.ACTION_VIEW);
• sendIntent.putExtra("sms_body", "default content");
• sendIntent.setType("vnd.android-dir/mms-sms");
• startActivity(sendIntent);
LẬP TRÌNH VỚI WIFI

• Bước 1: Xin quyền từ android manifest:ACCESS_WIFI_STATE


• Bước 2: tạo đối tượng wifi =
(WifiManager)gettApplicationContext().getSystemService(Context.WIFI_SERVICE)
• Bước 3: kiểm tra thiết bị đã bật wifi chưa? wifiManager.isWifiEnabled nếu chưa thì yêu cầu
bật wifiManager.setWifiEnabled(true)
• Bước 4: tạo broascat Receiver thông qua intent để quét các wifi

You might also like