Phần 1: Đặt vấn đề nghiên cứu 1. Lý do nghiên cứu đề tài Điện thoại smartphone đang ngày càng trở nên phổ biến tại Việt Nam. Theo thống kê của Google vào cuối quý II 2013, Việt Nam có hơn 17 triệu smartphone, tức là cứ khoảng 5 người sẽ sở hữu chung 1 chiếc điện thoại thông minh và số lượng này còn sẽ tăng nhanh chóng trong thời gian sắp tới. Giá smartphone ngày càng rẻ, đặc biệt ở những thị trường mới nổi là lý do khách hàng những các quốc gia này bỏ điện thoại chức năng để mua chiếc smartphone đầu tiên. Tuy nhiên: Thứ nhất, việc chuyển lần đầu từ điện thoại chức năng sang smartphone sẽ khiến người dung cảm thấy khó khăn và mất thời gian dài để làm quen với những chức năng mới trên chiếc điện thoại của mình. Điều này gây khó khăn đến trải nghiệm của người dùng, đặc biệt với những người ít tiếp xúc với công nghệ và những người từ độ tuổi trung niên. Thứ hai, thị phần android chiếm 70% số điện thoại bán ra thị trường nhưng chính android lại có sự phân mảng rất lớn, đồng thời, do là hệ điều hành mở nên mỗi nhà sản suất đều có sự tùy biến nhất định lên mỗi sản phẩm của mình nên bản rom gốc hay bản rom của các nhà sản xuất khác đều không tương thích và không thể cài lên máy của hãng sản xuất ban đầu được. Hệ quả là cùng smartphone android nhưng dùng bản cũ thì có cách sắp xếp thế này nhưng bản mới lại có cách sắp xếp khác, và giao diện của hãng Samsung sẽ khác với Lenovo, Acer hay Oppo,…làm người dùng không thể khai thác hết thong tin từ điện thoại nếu không thực sự tìm hiểu về nó. Ví dụ như những thông tin về tin nhắn được để chỗ này, thông tin về sim lại ở chỗ kia, thông tin về cuộc gọi lại ở chỗ nọ,…dù đây là những thứ được người dùng sử dụng nhiều nhất (vì suy cho cùng không phải ai mua điện thoại cũng để chụp ảnh tung lên facebook, để dùng điện thoại thay gương soi và để chơi game cả, bởi chức năng chính của một chiếc điện thoại là để gọi và nghe) Thứ ba, với những chiếc điện thoại xách tay, việc không hỗ trợ Tiếng Việt là điều phổ biến, gây ảnh hưởng tới trải nghiệm của người dùng không thông thạo ngoại ngữ. Trong số các chức năng của điện thoại, quản lý cuộc gọi là chức năng quan trọng và là yếu tố cần thiết với tất cả người sử dụng. Để làm đơn giản quá trình tương tác giữa người sử dụng Việt Nam với thiết bị của mình chính là nguyên nhân chính dẫn tới sự ra đời của đề tài nghiên cứu, phát triển phần mềm quản lý cuộc gọi trên android. 2. Ý nghĩa trong chuyên ngành Nghiên cứu về android là nghiên cứu về một chương trình lập trình hướng đối tượng, đây chính là một trong những hành trang quan trọng với sinh viên khoa điện điện tử nói chung và tự động hóa nói riêng để có thể hiểu rõ hơn về lập trình và thiết kế giao diện tương tác với người sử dụng trong các sản phẩm tự động hóa của mình Ứng dụng hiểu biết về android thiết kế các sản phẩm có khả năng điều khiển từ xa từ chính những thiết bị smartphone – thứ ngày càng phổ biến ở Việt Nam, qua đó tăng tính linh động và hiệu quả cho người sử dụng. Chẳng hạn ta có thể ngồi uống trà đá ở Hà Nội nhưng chỉ cần bấm vài phím thì điện thoại sẽ nhắn tin tới sim 900a tích hợp trong hệ thống của ta thì có thể vận hành được hệ thống xử lý rác thải bệnh viện ở trên Thái Nguyên (Tất nhiên phải có quá trình mã hóa thông tin vì không ai mong muốn một cô bán nước vỉa hè có thể táy máy nghịch hệ thống triệu đô đó). Hay có thể sử dụng kết nối Bluetooth để điều khiển một chiếc máy bay mô hình từ chính chiếc smartphone của chúng ta.
Trang 1Bản báo cáo đề tài nghiên cứu sinh viên
Trang 2Phần 1: Đặt vấn đề nghiên cứu
1 Lý do nghiên cứu đề tài
Điện thoại smartphone đang ngày càng trở nên phổ biến tại Việt Nam Theo thống kê của Google vào cuối quý II/ 2013, Việt Nam có hơn 17 triệu smartphone, tức là cứ khoảng 5 người
sẽ sở hữu chung 1 chiếc điện thoại thông minh và số lượng này còn sẽ tăng nhanh chóng trong thời gian sắp tới Giá smartphone ngày càng rẻ, đặc biệt ở những thị trường mới nổi là lý do khách hàng những các quốc gia này bỏ điện thoại chức năng để mua chiếc smartphone đầu tiên Tuy nhiên:
Thứ nhất, việc chuyển lần đầu từ điện thoại chức năng sang smartphone sẽ khiến người dung cảm thấy khó khăn và mất thời gian dài để làm quen với những chức năng mới trên chiếc điện thoại của mình Điều này gây khó khăn đến trải nghiệm của người dùng, đặc biệt với những người ít tiếp xúc với công nghệ và những người từ độ tuổi trung niên.
Thứ hai, thị phần android chiếm 70% số điện thoại bán ra thị trường nhưng chính android lại
có sự phân mảng rất lớn, đồng thời, do là hệ điều hành mở nên mỗi nhà sản suất đều có sự tùy biến nhất định lên mỗi sản phẩm của mình nên bản rom gốc hay bản rom của các nhà sản xuất khác đều không tương thích và không thể cài lên máy của hãng sản xuất ban đầu được Hệ quả là cùng smartphone android nhưng dùng bản cũ thì có cách sắp xếp thế này nhưng bản mới lại có cách sắp xếp khác, và giao diện của hãng Samsung sẽ khác với Lenovo, Acer hay Oppo,…làm người dùng không thể khai thác hết thong tin từ điện thoại nếu không thực sự tìm hiểu về nó Ví
dụ như những thông tin về tin nhắn được để chỗ này, thông tin về sim lại ở chỗ kia, thông tin về cuộc gọi lại ở chỗ nọ,…dù đây là những thứ được người dùng sử dụng nhiều nhất (vì suy cho cùng không phải ai mua điện thoại cũng để chụp ảnh tung lên facebook, để dùng điện thoại thay gương soi và để chơi game cả, bởi chức năng chính của một chiếc điện thoại là để gọi và nghe)
Tỉ lệ thiết bị chạy các phiên bản hệ điều
hành Android
Donut 1.6 (API4)Eclair 2.1 (API7)Froyo 2.2 (API8)Gingerbread 2.3.3-2.3.7 (API10)
Honeycomb 3.2 (API13)Ice Cream Sandwich 4.0.3-4.0.4 (API 15)
Jelly Bean 4.1.x (API16)4.2.x
Thứ ba, với những chiếc điện thoại xách tay, việc không hỗ trợ Tiếng Việt là điều phổ biến, gây ảnh hưởng tới trải nghiệm của người dùng không thông thạo ngoại ngữ.
Trang 3Trong số các chức năng của điện thoại, quản lý cuộc gọi là chức năng quan trọng và là yếu tố cần thiết với tất cả người sử dụng Để làm đơn giản quá trình tương tác giữa người sử dụng Việt Nam với thiết bị của mình chính là nguyên nhân chính dẫn tới sự ra đời của đề tài nghiên cứu, phát triển phần mềm quản lý cuộc gọi trên android.
2 Ý nghĩa trong chuyên ngành
Nghiên cứu về android là nghiên cứu về một chương trình lập trình hướng đối tượng, đây chính
là một trong những hành trang quan trọng với sinh viên khoa điện điện tử nói chung và tự động hóa nói riêng để có thể hiểu rõ hơn về lập trình và thiết kế giao diện tương tác với người sử dụng trong các sản phẩm tự động hóa của mình
Ứng dụng hiểu biết về android thiết kế các sản phẩm có khả năng điều khiển từ xa từ chính những thiết bị smartphone – thứ ngày càng phổ biến ở Việt Nam, qua đó tăng tính linh động và hiệu quả cho người sử dụng Chẳng hạn ta có thể ngồi uống trà đá ở Hà Nội nhưng chỉ cần bấm vài phím thì điện thoại sẽ nhắn tin tới sim 900a tích hợp trong hệ thống của ta thì có thể vận hành được hệ thống xử lý rác thải bệnh viện ở trên Thái Nguyên (Tất nhiên phải có quá trình mã hóa thông tin vì không ai mong muốn một cô bán nước vỉa hè có thể táy máy nghịch hệ thống triệu
đô đó) Hay có thể sử dụng kết nối Bluetooth để điều khiển một chiếc máy bay mô hình từ chính chiếc smartphone của chúng ta.
Phần 2: Mục tiêu – Chức năng chính của sản phẩm
1 Mục tiêu – yêu cầu
Mục tiêu: Thiết kế ra một ứng dụng:
- Chạy trên nền android
- Thực hiện các chức năng liên quan cuộc gọi
- Thực hiện các chức năng liên quan tin nhắn
Yêu cầu: ứng dụng có:
- Dung lượng nhỏ
- Hỗ trợ Tiếng việt cho người sử dụng
- Dễ sử dụng
Trang 42 Sơ đồ chức năng có trong ứng dụng
Phần 3: Công cụ - kiến thức cần thiết
1 Kiến thức và các cơ sở lý thuyết
a Lập trình java
- Java (đọc như "Gia-va") là một ngôn ngữ lập trình dạng lập trình hướng đối tượng (OOP) Khác với phần lớn
ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy,Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi (runtimeenvironment) chạy Bằng cách này, Java thường chạy chậm hơn những ngôn ngữ lập trình thông dịch khác như C++, Python, Perl, PHP, C#
- Cú pháp Java được vay mượn nhiều từ C & C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng
xử lý cấp thấp hơn Do đó việc viết một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn.Dùng bộ thư viện chuẩn KFC, nhiều đoạn code Java chỉ mất vài dòng trong khi C phải mất cả trang giấy Lập trình
C rất hay xảy ra lỗi và khó sửa Trong Java, hiện tượng dò rỉ bộ nhớ hoàn toàn có thể tránh bằng cách định nghĩa vàipreprocessor directives như #define NO_MEMORY_LEAK hay #define NO_ACCESS_VIOLATION ở đầuchương trình
b Lập trình android
- Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hìnhcảm ứng như điện thoại thông minh và máy tính bảng Ban đầu, Android được phát triển bởi Tổng công ty Android,với sự hỗ trợ tài chính từ Google và sau này được chính Google mua lại vào năm 2005 Android ra mắt vào năm
2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phầnmềm, và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động Chiếc điện thoại đầu tiênchạy Android được bán vào tháng 10 năm 2008
- Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép Apache Chính mã nguồn mở cùng vớimột giấy phép không có nhiều ràng buộc đã cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viênnhiệ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ậptrì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
Ứng dụng Android
Tin nhắn
Nhắn tin
Quản lý dữ liệu
Nhắn bằng bluetooth
Cuộc gọi
Gọi
Chặn cuộc gọi
Quản lý dữ liệu
Tính tiền cước
Giả cuộc gọi đến
Tiện ích
Kiểm tra thông tin SIM
Trò chơi
Trang 5trì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, ước tính khoảng 25 tỷ lượt
c API thực hiện các chức năng quản lý cuộc gọi
- Một giao diện lập trình ứng dụng (tiếng anh Application Programming Interface hay API) là một giao
diện mà một hệ thống máy tính hay ứng dụng cung cấp để cho phép các yêu cầu dịch vụ có thể được tạo
ra từ các chương trình máy tính khác, và/hoặc cho phép dữ liệu có thể được trao đổi qua lại giữa chúng.Chẳng hạn, một chương trình máy tính có thể (và thường là phải) dùng các hàm API của hệ điều hành đểxin cấp phát bộ nhớ và truy xuất tập tin
- Nhiều loại hệ thống và ứng dụng hiện thực API, như các hệ thống đồ họa, cơ sở dữ liệu, mạng, dịch vụweb, và ngay cả một số trò chơi máy tính Đây là phần mềm hệ thống cung cấp đầy đủ các chức năng vàcác tài nguyên mà các lập trình viên có thể rút ra từ đó để tạo nên các tính năng giao tiếp người- máy như:các trình đơn kéo xuống, tên lệnh, hộp hội thoại, lệnh bàn phím và các cửa sổ Một trình ứng dụng có thể
sử dụng nó để yêu cầu và thi hành các dịch vụ cấp thấp do hệ điều hành của máy tính thực hiện Hệ giaotiếp lập trình ứng dụng giúp ích rất nhiều cho người sử dụng vì nó cho phép tiết kiệm được nhiều thờigian tìm hiểu các chương trình mới, do đó khích lệ mọi người dùng nhiều ứng dụng hơn
2 Công cụ lập trình
a Net Bean IDE
- NetBean IDE là “môi trường phát triển tích hợp“ (Integrated Development Environment) cần có để lập trình chonhiều ngôn ngữ
- NetBean IDE hỗ trợ nhiều hệ điều hành như Windows, Mac, Linux, và Solaris NetBean bao gồm một IDE mãnguồn mở và một nền tảng ứng dụng cho phép tạo các ứng dụng cho web, doanh nghiệp, desktop và thiết bị di độngbằng các ngôn ngữ lập trình Java, C/C++, JavaScript, Ruby, Groovy, và PHP
- Software Development Kit
- Android Development Tools (ADT) plugin
- Java se development kit
- Có hai loại ứng dụng mà ta cần quan tâm, đó là ứng dụng hệ thống và ứng dụng thường Ứng dụng hệthống là những ứng dụng được cài đặt sẵn trong máy trước khi đến tay người dùng (có thể từ google hoặcnhà sản xuất điện thoại), những ứng dụng này có khả năng truy cập rất sâu và có những quyền mà những
Trang 6ứng dụng thường không được phép có như khóa máy vĩnh viễn,… Ứng dụng thường là những ứng dụng
do bên thứ 3 viết ra cung cấp đến tay người dùng Tuy nhiên hiện nay, việc ROOT máy đem lại quyềnSuper User cho người dùng khiến cho hai loại ứng dụng này cũng không còn trở nên quá khác biệt
họ ra lệnh cho ứng dụng hoạt động theo mong muốn
- Từ đây, ta gọi tắt giao diện hoạt động là giao diện cho ngắn gọn
c Intent
- Là một đối tượng cung cấp ràng buộc giữa các thành phần riêng biệt (thường gặp là giữa hai hoạtđộng) trong lập trình android các Intent được dùng chủ yếu để bắt đầu một hoạt động mới từ hoạt độngcũ
d Activity stack (Ngăn xếp hoạt động)
- Nguyên tắc hoạt động của các hoạt động dựa trên nguyên tắc của ngăn xếp: LIFO (last in first vào sau ra trước)
- Các sự kiện onPause, onResume,onStop gọi là vòng đời trạng thái
+ Nếu ta mở một hoạt động mới lên che khuất toàn bộ hoạt động cũ (không thấy hoạt động cũ nữa) thì
sẽ xảy ra sự kiện onPause (Tạm ngưng, có thể quay lại hoạt động này ngay lập tức) rồi onStop (Dừng,không thể quay lại hoạt động này ngay) với hoạt động cũ
+ Nếu ta mở hoạt động mới lên nhưng nó không che khuất hoạt động cũ (vẫn thấy hoạt động cũ) thì sẽxảy ra sự kiện onPause với hoạt động cũ
+ Muốn quay trở lại hoạt động cũ, ta phải dùng tới sự kiện onResume để phục hồi trạng thái cho hoạtđộng
Trang 7B Hướng dẫn lập trình
1 Viết ứng dụng đầu tiên
- Để tìm hiểu về một ngôn ngữ lập trình theo tôi thì không gì hay bằng tự viết một chương trình đầu tiên và xem cách nó hoạt động như thế nào thì sẽ trực quan hơn nhiều
- Trước tiên, chúng ta phải có bộ công cụ lập trình có thể được tải ở trang sau:
http://developer.android.com/sdk/index.html
- Mở eclipse, chọn file->new->other
- Khi nhấp vào other hiện ra khung như ở dưới, ta chọn android application project
Trang 8- Sau đó, ta tiến hành nhập các thông tin cho dự án, chú ý rằng:
+ Minimum required sdk: phiên bản thấp nhất có thể chạy ứng dụng
+ TargetSDK: phiên bản hiện tại của ứng dụng
- Đến đây bạn cứ nhấn next đến khi xuất hiện finish thì chọn finish thì sẽ có dự án đầu tiên của mình
- Chúng ta xem qua về cấu trúc cây thư mục của một dự án ứng dụng android và chú ý tới 1 số tệp vàthư mục:
Trang 9+ Androidmanifest.xml: mô tả các đặc điểm cơ bản của các ứng dụng và xác định mỗi thành phần
của nó Ta sẽ chú ý đến cách cấp phép cho một ứng dụng trong androidmanifest ở phần sau
+ scr: thư mục chứa các tệp nguồn của ứng dụng, là nơi ta lập trình xử lý các dữ liệu mà người dùng
tương tác với giao diện tạo ra
+ res: thư mục chứa các tài nguyên liên quan đến giao diện, ta chú ý tới layout là nơi chứa tệp liên
quan đến giao diện và values là nơi chứa các tệp về kích thước, màu sắc, string mà ta đã khai báo tronggiao diện
- Bạn đừng sợ sẽ phải lập trình gì vội, vì giờ tôi sẽ hướng dẫn bạn đóng gói dự án của bạn luôn Nhấp
chuột phải vào ứng dụng của bạn trên thanh package explorer->export:
- Hộp thoại export hiện ra, chọn export android application->next->next:
Trang 10- Chọn create new keystore->mục location tìm đường dẫn rồi tạo một tệp tên bất kỳ như hình vẽ, điền
password rồi nhập lại password vào ô confirm->next
- Hoàn thành đầy đủ các thông tin->next
- Chọn nơi chứa file apk->finish, xong, bạn đã tạo được file apk đầu tiên
Trang 11- Đến đây ta cài file apk vào điện thoại và chạy ứng dụng này, ứng dụng sẽ chạy, bật giao diện gốc lênthì giao diện mặc định sẽ tải layout mặc định và sẽ hiện lên dòng chữ “hello world”, kết quả này khôngmấy hấp dẫn lắm nhưng giờ bạn đã biết làm sao để chạy và tạo chương trình của bạn rồi
2 Quy ước lập trình
- Để mọi thứ trở nên đơn giản, chúng ta sẽ tiến hành lập trình theo trình tự sau:
+ Bước một: chúng ta sẽ lập trình giao diện cho ứng dụng trong thư mục res/layout/ Từ sau mỗi khinói lập trình giao diện hay tệp giao diện cũng tức là viết, mở tệp *.xml trong đường dẫn res/layout/*xml + Bước hai: chúng ta lập trình tệp nguồn xử lý các dữ liệu mà người dùng tương tác với giao diện tạo
ra trong thư mục scr/tên package/ Từ sau mỗi khi nói lập trình tệp nguồn hay mở tệp nguồn cũng tức làviết, mở tệp *.java trong đường dẫn scr/tên package/*.java Đây chính là bộ phận quan trọng nhất của mộtchương trình
+ Bước ba: chúng ta cấp phép cho ứng dụng, đảm bảo các cấp phép luôn đầy đủ giúp ứng dụng hoạtđộng đúng với mục đích và khả năng của nó Từ sau mỗi khi nói cấp phép cho ứng dụng cũng tức là viếtvào tệp AndroidManifest.xml trong đường dẫn bin/AndroidManifest.xml và tệp AndroidManifest.xml ởngay bên ngoài của cây thư mục (khoanh tròn trong hình dưới đây), về nguyên nhân vì sao lại có tới 2 tệpAndroidManifest.xml này thì tôi xin phép được không nhắc tới vì tôi cũng không biết tại sao lại như vậy,chỉ biết là nếu không viết đồng thời vào hai tệp này thì sẽ không thể cấp phép cho ứng dụng được:
Trang 12- Để dễ hình dung, lập trình giao diện cũng giống như là tạo ra một cơ thể người hoàn chỉnh, lập trình tệp nguồn là não bộ của cơ thể đó và cấp phép cho ứng dụng là thẻ tác nghiệp của nó Khi người này làm việc, môi trường sẽ tác động tới anh ta, thông tin được đưa đến não để xử lý và hồi đáp lại thông qua các hoạt động trong khuôn khổ phù hợp với nghề nghiệp được nêu ra trong thẻ tác nghiệp của anh ấy (nếu thẻtác nghiệp là nhà báo thì anh ta sẽ không thể làm nghề giáo viên được chẳng hạn vì luật pháp (hệ điều hành android) không cho phép điều đó)
- Trong ví dụ lập trình giao diện này, ta sẽ tạo ra một bố trí trong tệp xml bao gồm một trường văn bản
và một nút, trong ví dụ lập trình tệp nguồn ta sẽ trả lời khi nút được nhấn bằng cách gửi nội dung của trường văn bản sang một giao diện mới
- Mở activity_main.xml từ đường dẫn res/layout/ rồi chọn tab activity_main.xml (bên cạnh tab
graphical layout)
Trang 13- Nhìn vào các câu lệnh, ta để ý thấy dòng android:text=”@string/hello_world”,giờ thì chắc bạn hiểu vìsao chương trình đầu tiên lại in ra dòng chữ hello world rồi Tôi xin phân tích ngắn ngọn tiếp về các câulệnh này: RelativeLayout là một kiểu viewgroup và TextView là một kiểu view, các câu lệnh còn lạinhằm xác định các yếu tố như dài, rộng,… cho các view, viewgroup này, chú ý khi viết lệnh ta phải chú ýcác view phải luôn nằm trong viewgroup nếu không chúng sẽ không thể hiện lên được.
- Bây giờ ta xóa TextView và tất cả các câu lệnh trong nó đồng thời thay RelativeLayout thànhLinearLayout (là một kiểu viewgroup khác, hay được sử dụng hơn) và thêm dòng lệnhandroid:orientation=”horizontal” (xắp xếp các view theo chiều ngang), nếu không thích ta cũng có thểthay bằng “vertical” (xắp xếp theo chiều dọc) kết quả như sau:
- Ta cũng làm quen với 2 yếu tố cần xác định của một viewgroup hay view đó là:
+ android:layout_width: xác định chiều rộng cho đối tượng
+ android:layout_height: xác định chiều cao cho đối tượng
- Và các kiểu thường dùng cho 2 yếu tố này là:
+ ”math_parent”: đối tượng sẽ tự động thay đổi phủ kín vùng trống
+ ”fill_parent”: đối tượng sẽ thay đổi phủ kín kích thước trống
+ ”wrap_content”: đối tượng sẽ thay đổi phù hợp với kích thước các đối tượng trong nó
- Tạo view kiểu EditText bên trong viewgroup vừa tạo, nó sẽ trông như thế này: