Khi Android được phát hành thì một số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác với nhau và có thể sử dụng lại các thành phần từ những ứng dụng khác..
TỔNG QUAN VỀ ANDROID
Android và lịch sử phát triển
Android là một nền tảng phần mềm dựa trên mã nguồn mở Linux OS (Kernel 2.6) cho máy di động, máy tính bảng và những phần mềm trung gian (middleware) Nó không đơn thuần là một hệ điều hành, một công cụ lập trình hay một phần mềm trung gian mà nó bao gồm tất cả
Ban đầu, Android là hệ điều hành cho các thiết bị cầm tay dựa trên lõi Linux do công ty Android Inc (California, Mỹ) thiết kế Công ty này nhanh chóng đổi mới để đáp ứng tốt hơn chon hu cầu người tiêu dung và kết quả đầu tiên của nó chính là nền tẩng Android Android được thiết kế để phục vụ nhu cầu cảu các nhà sản xuất thiết kế, các nhà khai thác và lập trình viên thiết bị cầm tay
Phiên bản SDK lần đầu tiên phát hành vào tháng 11 năm 2007, hãng T-Mobile cũng công bố chiếc điện thoại Android đầu tiên đó là chiêc T-Mobile G1, chiếc smartphone đầu tiên dựa trên nền tảng Android Một vài ngày sau đó, Google lại tiếp tục công bố sự ra mắt phiên bản Android SDK release Candidate 1.0 Trong tháng 10 năm 2008, Google được cấp phép mã nguồn mở cho Android Platform
Khi Android được phát hành thì một số các mục tiêu trong kiến trúc của nó là cho phép các ứng dụng có thể tương tác với nhau và có thể sử dụng lại các thành phần từ những ứng dụng khác Việc tái sử dụng không chỉ được áp dụng chi các dịch vụ mà nó còn áp dụng cho cả các thành phần dữ liệu và giao diện người dùng
Vào cuối năm 2008, Google cho phát hành một thiết bị cầm tay được gọi là Android Dev Phone 1 có thể chạy được các ứng dụng Android mà không bị ràng buộc vào các nhà cung cấp mạng điện thoại di động Mục tiêu của thiết bị này là cho phép các nhà phát triển thực hiện các cuộc thí nghiệm trên một thiết bị thực có thể chạy hệ điều hành
Android mà không phải đăng ký một bản hợp đồng nào Vào khoảng cùng thời gian đó thì Google cũng phát hành một phiên bản vá lỗi 1.1 của hệ điều hành này Ở cả hai phiên bản 1.0 và 1.1 Android chưa hỗ trợ soft-keyboard mà đòi hỏi các thiết bị phải sử dụng bàn phím vật lý Android cố đặt vấn đề này bằng các phát hành SDK 1.5 vào tháng 4 năm
2009, cùng với một số tính năng khác Chẳng hạn như nâng cao khả năng ghi âm truyền thông, vật dụng, các live folder
Kiến trúc Android
Mô hình tổng quát các thành phần của hệ điều hành Android:
Bao gồm đầy đủ tính năng hệ thống Android, ứng dụng và tầngtrung để phát triển có thể mở rộng, tùy biến hoặc thêm vào cáccomponent của họ
Có 4 tầng hệ thống Android: ứng dụng Framework, AndroidRuntime, bản địa của thư viện, hạt nhân Linux Mỗi tầng làm việc tất cả nhờ giúpđỡ tầng dưới đây
Hệ điều hành android được phát triển dựa trên hạt nhân Linux, cụ thể là hạt nhân Linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này Tất cả mọi hoạt động của điện thoại muốn thi hành được thì đều được thực hiện ở mức cấp thấp ở lớp này bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cúng(driver model), thực hiện bảo mật (security), quản lý tiến trình(process)
Tuy được phát triển dựa vào nhân linux nhưng thực ra nhân linux đã được nâng cấp và sửa đổi rất nhiều để phù hợp với tính chất của những thiết bị cầm tay như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cầu kết nối mạng không dây… Các thành phần của linux:
- Display driver: Điều khiển việc hiển thị lên màn hình cũng như thu nhận những điều kiển của người dung lên màn hình(di chuyển, cảm ứng…)
- Camera Driver: Điểu khiển hoạt động của camera, nhận luồng dữ liệu từ camera trả về
- Bluetooth Driver: Điều khiển thiết bị thu phát song Bluetooth
- USB Driver: Quản lý hoạt động của cổng giao tiếp USB
- Keypad Driver: Điều khiển bàn phím
- Wifi Driver: Chịu trách nhiệm về việc thu sóng wifi
- Audio Driver: Điều khiển các bộ thu phát âm thanh giải mã các tín hiệu dạng audio thành tín hiệu số và ngược lại
- Power Management: Giám sát việc tiêu thụ điện năng
- M-System Driver: Quản lý việc đọc ghi… lên các thiết bị nhớ như thẻ SD, flash
- Binder IPC Driver: Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo chức năng truyền thông được thực hiện
Phần này có 2 phần là phần Library và Android Runtime
Thành phần này có nhiều thư viện được viết bằng C/C++ để các phần mềm có thể sử dụng các thư viện được hợp thành một số nhóm như:
- Thư viện hệ thống (System C Library) (Libc) : Thư viện dựa trên chuẩn C, được sử dụng chỉ bởi hệ điều hành
- Thư viện Media (Media Libraries): Có nhiều code để hỗ trợ việc ghi và phát các lại định dạng âm thanh, hình ảnh, video thông dụng
- Thư viện web (LibWebCore): Đây là thành phần để xem nội dung trên web, được sử dụng để xây dựng phần mềm web (Android Browse) cũng như để các ứng dụng khác có thể nhúng vào Nó cực kỳ mạnh, hỗ trợ được nhiều công cụ nghệ mạnh mẽ như HTML5, JavaScript, CSS…
- Surface Manage: Quản lý hiển thị 2D và 3D
- SQLite: Quản lý database của ứng dụng
- Free Type: Dùng cho hiển thị ảnh, font
- SSL (Secure Socket Layer): Tầng thiết lập giao dịch an toàn trên 2 ứng dụng trên
- OpenGL/EL: Hỗ trợ thư việ tùy chọn 3D tĩnh và động
- Mỗi ứng dụng Android chạy trên một proccess riêng của Dalvik VM (máy ảo) Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu quả trên cùng một thiết bị
- Máy ảo Dalvik thực thi các file mang định dạng dex (Dalvik Excutable), định dạng này là định dạng đã được tối ưu hóa để chỉ chiếm một vùng nhớ vừa đủ xài và nhỏ nhất có thể
- VM chạy các class (đã được compile trước đó bởi 1 trình biên dịch ngôn ngữ Java), sở dĩ VM chạy được các class này là nhờ chương trình DX tool đã convert các class sang định dạng dex
4 Tầng Application Framework: Đây là tầng mà Google xây dựng cho các developer để phát triển các ứng dụng của họ trên Android, chỉ bằng cách gọi các API có sẵn mà Google đã viết để sử dụng các tính năng của phần cứng mà không cần hiểu cấu trúc bên dưới
Bằng cách cung cấp một nền tảng phát triển mở, Android cho các nhà phát triển khả năng xây dựng các ứng dụng cực kỳ phong phú và sáng tạo Nhà phát triển được tự do tận dụng các thiết bị phần cứng, thông tin địa điểm truy cập, các dịch vụ chạy nền, thiết lập hệ thống báo thức, thêm các thông báo để các thanh trạng thái, và nhiều, nhiều hơn nữa Tất cả các ứng dụng thường gồm một bộ các dịch vụ và hệ thống cơ bản sau:
- View UI dùng để xây dựng layout của ứng dụng bao gồm: list view, text field, button, dialog, form
- Content Providers cho phép các ứng dụng có thể truy cập dữ liệu từ các ứng dụng khác (như ứng dụng của ta có thể lấy thông tin
- Contacts của điện thoại Android), hoặc để chia sẻ dữ liệu của riêng ứng dụng
- Resource Manager cung cấp cách thức truy cập đến non-code resources như các asset, graphic, image, music, video
- Notification Manager cho phép tất cả các ứng dụng hiển thị thông báo của mình trên HDH
- Activity Manager quản lý vòng đời của các ứng dụng.Ở góc nhìn của người dùng ta có thêm tầng application (là ứng dụng do chúng ta viết)
Các thành phần của Android
1 Thành phần của 1 chương trình Android
Một activity thể hiện một giao diện đồ họa người dùng Ví dụ một activity có thể biểu diễn một danh sách các menu item để người dùng có thể chọn và có thể hiển thị ảnh cùng với tiêu đề Một ứng dụng gửi tin nhắn văn bản có thể có một hoạt động là hiển thị một danh sách các liên hệ để gửi tin nhắn đến, hoạt động thứ hai là viết tin nhắn tới liên hệ được chọn, các hoạt động khác nữa là xem lại tin nhắn cũ hay thay đổi cài đặt Mặc dù chúng làm việc cùng nhau để tạo thành một giao diện người dùng, mỗi activity độc lập với những ứng dụng khác Mỗi activity là một lớp con của lớp cơ sở Activity
Một ứng dụng có thể gồm chỉ một activity hay nhiều activity Thông thường, một trong số các activity được đánh dấu như là activity đầu tiên phải được trình diễn tới người dùng khi ứng dụng khởi động Chuyển từ một activity sang activity khác được hoàn thành bằng các cho activity hiện thời khởi động activity kế tiếp
Mỗi activity được đưa ra một cửa sổ mặc định để vẽ vào Thông thường, cửa sổ sẽ lấp đầy màn hình, nhưng nó có thể nhỏ hơn màn hình và nằm trên các của sổ khác Một activity có thể sử dụng của dụng cửa sổ bổ sung – ví dụ như một pop-up dialog gọi cho một đáp ứng người dùng ở giữa của activity, hay một cửa sổ biểu diễn cho người dùng với thông tin quan trọng khi họ chọn một item cụ thể trên màn hình
Nội dung trực quan của cửa sổ được cung cấp bởi một cây phân cấp các đối tượng view dẫn xất từ lớp View Mỗi view điều khiển một khoảng hình chữ nhật cụ thể bên trong cửa sổ View cha chứa và tổ chức bố cục các view con Các view lá vẽ trong hình chữ nhật và chúng điều khiển và đáp ứng lại các hành động người dùng trực tiếp ở khoảng trống này Do đó, các view là nơi mà các tương tác activity với người dùng diễn ra Ví dụ một view có thể hiển thị một hình ảnh nhỏ và khởi tạo một hoạt động khi người dùng nhấn vào hình ảnh đó Android có một số view đã xây dựng sẵn mà bạn có thể sử dụng – gồm các buttons, text fields, scroll bars, menu items, check boxes…
Một số cây phân cấp view được đặt trong một cửa sổ của activity bằng phương thức Activity.setContentView() Content view là đối tượng view ở gốc cây phân cấp
Class cơ sở Activity định nghĩ một loạt các sự kiện mà điều chỉnh vòng đời của một hoạt động Class Activity định nghĩa các sự kiện sau đây:
- OnCreate( ): hàm này được gọi khi lớp Activity được khởi tạo, dùng để thiết lập giao diện ứng dụng và thực thi những thao tác cơ bản
- onStart(): hàm này được gọi khi lớp ứng dụng xuất hiện trên màn hình
- onResume(): hàm được gọi ngay sau OnStart hoặc khi người dùng focus ứng dụng, hàm này sẽ đưa ứng dụng lên top màn hình
- onPause(): hàm được gọi khi hệ thống đang focus đến 1 activity trước đó
- onStop(): hàm được gọi khi một activity khác được khởi động và focus
- onRestart(): đưọc gọi khi ứng dụng chuyển sang onStop(), nhưng muốn khởi động lại bằng onStart()
Intent là cầu nối giữa các Activity (ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau) Intent chính là người đưa thư, giúp chúng ta triệu gọi cũng như truyền các dữ liệu cần thiết để thực hiện một Activity từ một Activity khác
Một service không có giao diện trực quan, nó chạy trên nền trong một khoảng thời gian không xác định Ví dụ một service có thể chơi nhạc nền, hay nó nạp dữ liệu trên mạng hay tính toán cái gì đó và cung cấp kết quả cho activity cần đến nó Mỗi service được mở rộng từ lớp cơ sở service
Một ví dụ cổ điển là media player chơi các bài hát từ một danh sách Ứng dụng player có thể có một hoặc hai activity cho phép người dùng chọn bài hát và bắt đầu chơi Tuy nhiên, music playback không tự nó được xử lý bởi một activity bởi vì người dùng sẽ mong muốn chơi tiếp nhạc khi họ rời khỏi player và làm cái gì đó khác Để tiếp tục chơi nhạc, media player activity có thể khởi động một service chạy trên nền Hệ thống sẽ giữ cho music playback service chạy thậm chí khi activity khởi động nó rời khỏi màn hình
Trong khi kết nối, bạn có thể giao tiếp với dịch vụ thông qua giao diện mà service đó trưng ra Ví dụ như trong music service, giao diện này có thể cho phép người dùng pause, rewind, stop, restart lại playback
Giống như các activity và các thành phần khác Service chạy trong thread chính của tiến trình ứng dụng Vì thế chúng không thể chặn những thành phần khác hay giao diện người dùng, chúng thường tạo ra các thread khác cho các nhiệm vụ hao tốn thời gian
Một Broadcast Reveive là một thành phần không làm gì ngoài việc nhận và đáp lại các thông báo Broadcast Nhiều Broadcast khởi đầu trong mã hệ thống – ví dụ như thông báo múi giờ thay đổi, pin yếu, ảnh đã được chụp, hay người dùng thay đổi ngôn ngữ… Các ứng dụng có thể tạo ra Broadcast chẳng hạn để ứng dụng khác biết được một số dữ liệu đã được tải về thiết bị và sẵn sang cho việc sử dụng chúng
Một số ứng dụng có thể có Broadcast Reveive để đáp ứng bất cứ thông báo nào mà nó cho là quan trọng Tất cả các reveive mở rộng từ lớp cơ sở Broadcast Reveive
Broadcast Reveive không hiển thị một giao diện người dùng Tuy nhiên chúng có thể bắt đầu một activity để đáp lại thông tin mà chúng nhận, hay chúng có thể lấy sử dụng
NotificationManager để cảnh báo người dùng Notifications có thể lấy sự chú ý của người dùng bằng nhiều cách: rung, tạo âm thanh… Chúng thường lấy một biểu tượng bền vững trong thanh trạng thái cái mà người dùng có thể mở để lấy thông điệp
Một Content Provider tạo ra một tập cụ thể các dữ liệu của ứng dụng khả dụng cho các ứng dụng khác Dữ liệu có thể được lưu trữ trong hệ thống file, trong một cơ sở dữ liệu
SQLite, hay trong một cách khác nào đó Content provider mở rộng lớp cơ sở Content Provider để cài đặt một tập các chuẩn các phương thức cho phép các ứng dụng không gọi trực tiếp các phương thức này, chúng sử dụng một đối tượng Content Provider và gọi các phương thức của ns Một Content Provider có thể nói chuyện với Content Provider nào, chúng cộng tác với provider để quản lý tiến trình
PHÂN TÍCH XML TRONG ANDROID
Tổng quan về XML
XML (viết tắt từ tiếng Anh: eXtensible Markup Language, tức "Ngôn ngữ đánh dấu mở rộng") là ngôn ngữ đánh dấu với mục đích chung do W3C đề nghị, để tạo ra các ngôn ngữ đánh dấu khác Đây là một tập con đơn giản của SGML, có khả năng mô tả nhiều loại dữ liệu khác nhau Mục đích chính của XML là đơn giản hóa việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống được kết nối với Internet Các ngôn ngữ dựa trên XML (Ví dụ: RDF, RSS, MathML, XHTML, SVG, GML và cXML) được định nghĩa theo cách thông thường, cho phép các chương trình sửa đổi và kiểm tra hợp lệ bằng các ngôn ngữ này mà không cần có hiểu biết trước về hình thức của chúng
XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và áp dụng một cấu trúc kiểu cây cho thông tin đó Tại mức căn bản, mọi thông tin đều thể hiện dưới dạng text, chen giữa là các thẻ đánh dấu (markup) với nhiệm vụ ký hiệu sự phân chia thông tin thành một cấu trúc có thứ bậc của các dữ liệu ký tự, các phần tử dùng để chứa dữ liệu, và các thuộc tính của các phần tử đó Về mặt đó, XML tương tự với các biểu thức S (S-expression) của ngôn ngữ lập trình LISP ở chỗ chúng đều mô tả các cấu trúc cây mà trong đó mỗi nút có thể có một danh sách tính chất của riêng mình Đơn vị cơ sở của XML là các ký tự theo định nghĩa của Universal Character Set (Bộ ký tự toàn cầu) Các ký tự được kết hợp theo các tổ hợp chuỗi hợp lệ để tạo thành một tài liệu XML Tài liệu này gồm một hoặc nhiều thực thể, mỗi thực thể thường là một phần nào đó của các ký tự thuộc tài liệu, được mã hóa dưới dạng một chuỗi các bit và lưu trữ trong một tệp văn bản (text file)
Các tệp XML có thể dùng cho nhiều loại dữ liệu đa phương tiện RFC3023 định nghĩa các loại "application/xml" và "text/xml", với ý rằng dữ liệu được biểu diễn bằng XML mà không nói gì đến ngữ nghĩa của dữ liệu
Sự phổ biến của các phần mềm soạn thảo văn bản (word processor) đã hỗ trợ việc soạn thảo và bảo trì tài liệu XML một cách nhanh chóng Trước XML, có rất ít ngôn ngữ mô tả dữ liệu với các đặc điểm đa năng, thân thiện với giao thức Internet, dễ học và dễ tạo Thực tế, đa số các định dạng trao đổi dữ liệu thời đó đều chuyện dụng, có tính độc quyền, và có định dạng nhị phân (chuỗi bit thay vì chuỗi ký tự) khó dùng chung giữa các ứng dụng phần mềm khác nhau hay giữa các hệ nền (platform) khác nhau Việc tạo và bảo trì trên các trình soạn thảo thông dụng lại càng khó khăn
Bằng cách cho phép các tên dữ liệu, cấu trúc thứ bậc được phép, và ý nghĩa của các phần tử và thuộc tính có tính chất mở và có thể được định nghĩa bởi một giản đồ tùy biến được, XML cung cấp một cơ sở cú pháp cho việc tạo lập các ngôn ngữ đánh dấu dựa XML theo yêu cầu Cú pháp chung của các ngôn ngữ đó là cố định — các tài liệu phải tuân theo các quy tắc chung của XML, bảo đảm rằng tất cả các phần mềm hiểu XML ít ra cũng phải có khả năng đọc (phân tích cú pháp - parse) và hiểu bố cục tương đối của thông tin trong các tài liệu đó Giản đồ chỉ bổ sung một tập các ràng buộc cho các quy tắc cú pháp Các giản đồ thường hạn chế tên của phần tử và thuộc tính và các cấu trúc thứ bậc được phép, ví dụ, chỉ cho phép một phần tử tên 'ngày sinh' chứa một phần tử tên 'ngày' và một phần tử có tên 'tháng', mỗi phần tử phải chứa đúng một ký tự Đây là điểm khác biệt giữa XML và HTML HTML có một bộ các phần tử và thuộc tính không mềm dẻo, chỉ có một tác dụng và nói chung là không thể dùng cho mục đích khác
XML không hạn chế về việc nó được sử dụng như thế nào Mặc dù XML về cơ bản là dạng text, các phần mềm với chức năng trừu tượng hóa nó thành các định dạng khác giàu thông tin hơn đã nhanh chóng xuất hiện, quá trình trừu tượng hóa này được thực hiện chủ yếu qua việc sử dụng các giản đồ định hướng kiểu dữ liệu (datatype-oriented schema) và khuôn mẫu lập trình hướng đối tượng (mà trong đó, mỗi tài liệu XML được thao tác như là một đối tượng) Những phần mềm như vậy có thể coi XML như là dạng text đã được tuần tự hóa chỉ khi nó cần truyền dữ liệu qua mạng
Cấu trúc XML cơ bản cho một phần tử là:
nội_dung
RSS
RSS là một dạng file XML được cung cấp bởi hầu hết các trang báo điện tử ngày nay với mục đích cho phép người dùng có thể lấy nội dung bài viết về để sử dụng với các mục đích khác nhau.
Các lớp, giao diện phân tích XML trong Android
Java API for XML Processing, hay JAXP là một trong các API cho lập trình Java XML
Nó cung cấp khả năng kiểm chứng và phân tích các tài liệu XML Hai loại giao diện (interface)để phân tích cơ bản là:
- Giao diện phân tích dạng mô hình đối tượng tài liệu (Document Object Model), viết tắt là DOM
- Giao diện phân tích API đơn giản dành cho XML (Simple API for XML)- viết tắt là SAX
- SAX, API dẫn luồng cho XML (the Streaming API for XML)
Cùng với các giao diện phân tích API này còn cung cấp một giao diện XSLT để cung cấp việc chuyển đổi dữ liệu và cấu trúc của một tài liệu XML sang một dạng khác
DOM là viết tắt của từ Document Object Model, nó là giao diện dễ hiểu nhất phân tích toàn bộ tài liệu XML và kiến thiết một cấu trúc hoàn chỉnh đại diện cho tài liệu bằng cách dùng các lớp để mô hình hóa các khái niệm ghi trong tài liệu Bộ phân tích DOM được gọi là DocumentBuilder, vì nó tạo nên một hình thức đại diện cho Document trong bộ nhớ java.xml.parse.DocumentBuilder được tạo nên bởi
.java.xml.parse.DocumentBuilderFactory DocumentBuilder tạo ra một trường hợp của org.w3c.dom.Document, tức là một cây chứa các nút trong tài liệu XML, mỗi nốt trong cấu trúc lại thực hiện một giao diện Trong Android, DOM được hỗ trợ hoàn toàn Nó làm việc chính xác như khi nó làm việc trong code Java Trình phân tích phân tích DOM đọc tất cả các tài liệu vào bộ nhớ rồi sau đó cho phép bạn sử dụng các DOM API duyệt qua cây XML, truy vẫn vào dữ liệu mà bạn muốn Tuy nhiên thông thường DOM tiêu tốn bộ nhớ nhiều hơn vì trước tiên mọi thứ đều được đọc vào bộ nhớ Đây có thể trở thành một vấn đề trên thiết bị di động chạy Android, nhưng vẫn có thể đáp ứng được một số trường hợp tài liệu XML không quá lớn
Bộ phân tích SAX được tạo bằng java.xml.parses.SAXparsesFactory Khác với DOM, nó không tạo ra một hình thức đại diện của tài liệu XML trong bộ nhớ vì thế nó hoạt động
Ngô Hoàng Anh – 513CNT010 21 nhanh hơn, ít tốn bộ nhớ hơn Nó thông báo cho các trình Client cấu trúc của tài liệu XML bằng cách gọi các hàm callbacks, nghĩa là bằng cách gọi các phương pháp của các trường hợp bản mẫu: Javadoc:SE đã được cung cấp sẵn Lớp DefaultHandler nằm trong gói org.xml.sax.helpers Lớp này thực hiện các giao diện ContentHandler, ErrorHandler, DTDHandler và EntityResolve Đại bộ phận các trình Client chỉ quan tâm tới phương pháp được định nghĩa trong giao diện ContentHandler mà thôi Các phương pháp của giao diện ContentHandler được DefaultHandler thực hiện, được gọi đến khi bộ phân tích SAX bắt gặp những phần tử tương ứng trong tài liệu XML, những phương pháp chủ yếu trong giao diện này là:
- Phương thức startDocument(): Được gọi khi bắt đầu tài liệu
- Phương thức endDocument(): Được gọi khi kết thúc tài liệu
- Phương thức startElement(): Được gọi khi bắt đầu một thẻ
- Phương thức endElement(): Được gọi khi kết thúc một thẻ
- Phương thức character(): Được gọi sau phương thức startElement(), để phân tích nội dung trong thẻ đó
Các trình Client cung cấp một phân lớp của DefaultHandler Phân lớp này được sử dụng để lấn quyền các phương thức trên và xử lý dữ liệu Quá trình này có thể bao gồm lưu trữ dữ liệu vào database, hoặc viết chúng ra luồng Lớp này vẫn sử dụng trình xử lý SAX chuẩn, vì đơn giản bạn đã sử dụng lại RssHandler như trong ví dụ trên Việc này tuy cũng tốt nhưng nó vẫn có đôi chút phức tạp về mã Như đã nói mã phân tích SAX mới không sử dụng trình sử lý SAX, thay vào đó nó sử dụng các lớp từ gói android.sax trong SDK Các lớp này cho phép mô hình hóa cấu trúc tài liệu XML của bạn và thêm một trình nghe sự kiện nếu cần Trong đoạn code trên đã khai báo rằng tài liệu của bạn có một phần tử gốc là rss và ba phần tử con của nó là channel Mỗi channel lại có ba phần tử con khác là ITEM và bạn bắt đầu gắn các trình nghe Đối với mỗi trình nghe, một lớp bên trong đã thực hiện giao diện mà bạn hướng tới EndElementListner hoặc EndTextElementListner Việc này không chỉ đảm bảo tính đơn giản mà còn hiệu quả hơn Cuối cùng khi gọi phương thức tiện ích Xml.parse, trình xử lý sẽ tạo ra phần tử gốc Toàn bộ code trong ví dụ trên thuộc loại tùy chọn
Ngôn ngữ tập tin định dạng XML dành cho việc chuyển đổi ( The XML Stylesheet
Language for Transformations, hay XSLT) cho phép biến đổi một bản tài liệu XML sang các dạng dữ liệu khác
Phân tích nội dung XML trong Android sử dụng SAX
Sơ lược về SAX (Simple API for XML), gồm có 2 interface chính: XMLReader là interface dùng để đọc XML và ContentHandler dùng để nhận và xử lý dữ liệu từ XML Hai interface này giải quyết 90% nhu cầu của người dùng với SAX SAX (Simple API for XML) được phát minh vào cuối năm 1998 khi Peter, MurrayRust và một số tác giả phân tích cú pháp XML được viết bằng Java nhận ra rằng sẽ không hợp lý khi dùng quá nhiều các bộ APIkhác nhau cho chung 1 mục đích là đọc XML Murray-Rust là người đầu tiên đề xuất những gì ông gọi là "YAXPAPI" Lý do Murray-Rust muốn đặt tên là Yet Another XML Parser API đã vì ông đã hoàn toàn bị mệt mỏi vì phải dùng nhiều hàm API phân tích cú pháp XML cho ứng dụng JUMBO Thay vào đó, ông muốn có một API chuẩn tất cả mọi người có thể đồng ý Sau một thời gian ngắn beta SAX 1.0 được phát hành vào ngày 11 tháng năm 1998
2 Ưu điểm và nhược điểm của SAX
- Sử dụng ít bộ nhớ
- Tốc độ xử lý nhanh
- Tập trung vào dữ liệu hiện hành
- Dễ sử dụng để lọc dữ liệu
- Tuy nhiên SAX có các nhược điểm sau:
- Không thể tác động lên dữ liệu XML
- Chế độ lưu trữ trạng thái phức tạp
- Khó khăn khi phân tích cấu trúc XML lớn
3 Các khái niệm dùng trong SAX
Parsing: là quá trình đọc file XML và lấy dữ liệu của XML đưa vào chương trình đồng thời check lỗi cú pháp của XML
Callback Interface: SAX sử dụng các đối tượng Observer để đọc dữ liệu trong file XML Lập trình viên JAVA đã quen thuộc với kiến trúc lập trình theo sự kiện của AWT và Swing Ví dụ như khi chúng ta viết 1 class thực thi từ interfaceMouseListener, class này
Ngô Hoàng Anh – 513CNT010 23 sẽ mặc nhiên có các sự kiện của interface này Sau đó chúng ta đăng ký class này vào cho
1 object ví dụ như là button, button này có thể nhận các sự kiện liên quan đến thao tác của con trỏ SAX cũng hoạt động theo cấu trúc đó Tuy nhiên điểm khác biệt lớn nhất giữa Swing và SAX là SAX không cho phép gắn nhiều hơn 1 sự kiện cho cùng 1 object
CÀI ĐẶT VÀ CHẠY ANDROID STUDIO
Cài đặt Android Studio
Lựa chọn tất cả các options
The Android SDK (software development kit) là một tập hợp các công cụ được sử dụng để phát triển ứng dụng cho Android Android SDK bao gồm:
• Các thư viện đòi hỏi
• Thiết bị mô phỏng (emulator)
• Các tài liệu liên quan cho Android API
• Các hướng dẫn cho hệ điều hành Android
Android Virtual Device (AVD) là một cấu hình thiết bị, nó chạy với bộ giả lập
Android (Android emulator) Nó làm việc với bộ giả lập để cung cấp một môi trường thiết bị ảo cụ thể, để cài đặt và chạy ứng dụng Android
Intel Hardware Accelerated Execution Manager (Intel® HAXM) là một phần cứng hỗ trợ ảo hóa (hypervisor) có sử dụng công nghệ Intel Virtualization
Technology (Intel® VT) để tăng tốc độ ứng dụng Android trên máy chạy phần mềm giả lập Android
Chọn thư mục cài đặt:
• Android SDK Install Location: C:\DevPrograms\Android\sdk
Nếu máy tính của bạn được trang bị phần cứng tốt, bộ giả lập Android (Android Emulator) có thể chạy được trong chế độ tăng tốc (Accelerated performance mode)
Bạn có thể cấu hình chỉ định số lượng RAM tối đa dành cho bộ quản lý tăng tốc phần cứng ( Intel Hardware Accelerated Manager - HAXM) Khuyến nghị là 2GB
Chú ý: Khi bạn đặt chỗ một lượng RAP lớn, có thể là nguyên nhân làm các chương trình khác chạy chậm đi khi bạn đang sử dụng bộ giả lập Android x86 với HAXM
Bạn đã cài đặt xong Android Studio
Chạy Android Studio
Trong lần chạy đầu tiên, Android Studio hỏi bạn có nhập khẩu các sét đặt từ phiên bản Android Studio mà bạn có thể đã cài đặt trước đó hay không Bạn có thể chọn NO
Lựa chọn một Theme mà bạn thích:
Trong lần chạy đầu tiên, Android cần download một vài thành phần Bạn cần chờ đợi cho tới khi tiến trình download và cài đặt hoàn thành
LẬP TRÌNH TRÊN ANDROID
Giới thiệu INTENTS
Intent là cầu nối giữa các Activity (ứng dụng Android thường bao gồm nhiều
Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau) Intent chính là người đưa thư, giúp chúng ta triệu gọi cũng như truyền các dữ liệu cần thiết để thực hiện một Activity từ một Activity khác
Thực ra Intent là một cấu trúc dữ liệu được mô tả trong Android.content.Intent
• Các Action định nghĩa sẵn:
Về nguyên tắc chúng ta có thể đặt tên action của một intent là bất cứ thứ gì theochuẩn đặt tên thông thường, hay thậm chí dùng luôn hằng action đã định nghĩa sẵn như ACTION_VIEW (hay “Android.intent.action.VIEW”) Cái tên VIEW thực chất chỉ là một tên gợi tả, chúng ta có thể dùng nó với mục đích thực hiện một activity để … gửi mail!
Tuy nhiên điều đó rõ ràng là rất “ngớ ngẩn” Thay vào đó ta hãy dùng
ACTION_SEND hay ACTION_SENDTO
Việc đặt tên action cho intent đúng tên gợi tả còn có một ý nghĩa khác đó là app của chúng ta có thể được triệu gọi từ một app khác Ví dụ chúng ta viết một app có activity đáp ứng intent ACTION_SEND và để chia sẻ một bức ảnh lên trang web của chúng ta (giống như ta làm với Facebook, Flickr etc.)
Khi đó có thể app của chúng ta sẽ là một lựa chọn chia sẻ ảnh của người dùng điện thoại
2 Sử dụng Intents khởi động cho Activities :
Phổ biến nhất trong Intents là việc liên kết dữ liệu giữa các thành phần ứng dụng, Intents được dùng để bắt đầu, dừng lại và chuyển tiếp giữa các
Activities trong ứng dụng Để mở một ứng dụng khác trong một ứng dụng có sẵn thì chúng ta gọi startActivity như sau: startActivity(myIntent); Để theo dõi thông tin phản hồi từ phương thức mở ta sử dụng phương thức : startActivityForResult(Intent)
3 Intent không tường minh thực thi Activity :
Trong trường hợp này intent không chỉ định một lớp cụ thể mà thay vào đó dùng các dữ liệu khác (action, data, type, etc.) và để hệ thống tự quyết định xem lớp nào (app nào) sẽ thích hợp để đáp ứng intent đó
Thông tin action và category của activity trong một app đáp ứng intent đó phải được khai báo trong Manifest của app (AndroidManifest.xml) dưới dạng Intent-filter (tất nhiên nếu chúng ta muốn gọi một built-in action thì ta không cần quan tâm đến vấn đề này)
Ví dụ: chúng ta muốn cho phép người dùng thực hiện cuộc gọi từ một ứng dụng, hơn là thực hiện quay số mới, chúng ta có thể sử dụng một ý định ngầm yêu cầu hành động ("quay số") được thực hiện trên một điện thoại như trong đoạn mã dưới đây: if (somethingWeird && itDontLookGood) {
Intent intent newIntent(Intent.ACTION_DIAL,Uri.parse(“tel:555-2368”)); startActivity(intent);
4 Intent tường minh thực thi Activity :
Như đã trình bày ở phần trên, intent có thể dùng thuộc tính phụ component để chỉ định đích danh tên lớp sẽ thực thi Activity Để thực hiện điều này, lớp Intent cung cấp các hàm đó là setComponent(ComponentName) và setClass(Context,Class) và setClassName(Context,String) setClassName(String, String)
Chỉ được dùng để gọi các Activities trong cùng một app
Intent intent = new Intent(); intent.setClassName("ten_package", "ten_lop_ben_trong_package"); startActivity(intent);
5 Sử dụng Intents gửi đi thông điệp ra ngoài ứng dụng hoặc Activity :
Là một cơ chế truyền tin cấp hệ thống, có khả năng gửi tin đến một tiến trình Chúng ta có thể sử dụng Broadcast Receivers để nhận, để trả lời hoặc phát đi các dữ liệu mà chúng ta muốn
Broadcast Intent dùng để thông báo cho các ứng dụng khác các sự kiện của hệ thống hay ứng dụng, mở ra các mô hình lập trình hướng sự kiện giữa các ứng dụng Broadcast Intent giúp cho ứng dụng của chúng ta cởi mở hơn bởi vì nó phát đi một sự kiện bằng cách sử dụng Intent
5.1 Cách thực hiện gửi dữ liệu dùng Intent trong Activity:
Broadcast Intent thực tế khá đơn giản, trong các thành phần ứng dụng của chúng ta, chúng ta xây dựng một Intent mà chúng ta muốn quảng bá bằng cách sử dụng sentBroadcast để gửi đi
Intent intent = new Intent(NEW_LIFEFORM_DETECTED); intent.putExtra(“lifeformName”, lifeformType); intent.putExtra(“longitude”, currentLongitude); intent.putExtra(“latitude”, currentLatitude); sendBroadcast(intent);
5.2 Nhận dữ liệu với Broadcast Receiver:
BroadcastReceivers được dùng để nhận dữ liệu từ Broadcast Intents, để kích hoạt BroadcastReceivers thì nó cần phải được đăng ký hoăc khai trong code hoặc trong
Mainifest và chúng ta cần phải sử dụng Intents Filter để xác định Intent được phép gửi dữ liệu đến
Ví dụ: khởi tạo mới một BroadcastReceivers import Android.content.BroadcastReceiver; import Android.content.Context; import Android.content.Intent; public class MyBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
//TODO: React to the Intent received
Thông thường thì BroadcastReceivers sẽ cập nhật nội dung, khởi động dịch vụ , cập nhật người dùng cuối, hoặc thông báo người sử dụng bằng cách sử dụng quản lý Notification Manager
Ví dụ đoan code sau đây cho thấy cách đăng ký
BroadcastReceivers trong code hoặc trong Mainifest public class LifeformDetectedBroadcastReceiver extends
BroadcastReceiver { public static final String BURN“com.paad.alien.action.BURN_IT_WITH_FIRE”;
@Override public void onReceive(Context context, Intent intent) {
// Get the lifeform details from the intent
String type = intent.getStringExtra(“type”);
Ngô Hoàng Anh – 513CNT010 36 double lat = intent.getDoubleExtra(“latitude”, 0); double lng = intent.getDoubleExtra(“longitude”, 0);
Location loc = new Location(“gps”); loc.setLatitude(lat); loc.setLongitude(lng); if (type.equals(“alien”)) {
Intent startIntent = new Intent(BURN, data); startIntent.putExtra(“latitude”, lat); startIntent.putExtra(“longitude”, lng); context.startActivity(startIntent);
• Đăng ký Broadcast Receivers trong file Manifest:
• Đăng ký Broadcast Receivers sử dụng code:
// tạo và đăng ký broadcast receiver
Giới thiệu ADAPTERS
Adapter là cầu nối để liên kết dữ liệu với giao diện người dùng
1 Một số Adapter : Để sử dụng được Adapter ta phải kế thừa lớp trừu tượng AdapterView, và chúng ta cũng có thể tạo ra một Adapter tùy ý bằng cách này ArrayAdapter: là một lớp chung để gắn các Adapter Views vào một mảng đối tượng, theo mặc định thì ArrayAdapter liên kết cá giá trị toString của từng đối tượng ra TextView trong layout, chúng ta có thể thay thế TextView bằng các điều khiển khác phức tạp hơn bằng cách sử dụng kỹ thuật
Overriding phương thức getView() SimpleCursorAdapter : dùng để liên kết các View với con trỏ để trả về câu truy vấn cho Content Provider, nó được định nghĩa trong file XML layout và liên kết các giá trị ràng buộc bên trong mỗi cột kết quả với View trong layout
2 Sử dụng Adapter hiển thị dữ liệu : Để áp dụng một Adapter đến một class AdapterView ta chỉ cần gọi phương thức setAdapter của View đưa vào trong tập Adapter được minh họa trong đoạn code sau:
ArrayList myStringArray = new ArrayList();
ArrayAdapter myAdapterInstance; int layoutID = Android.R.layout.simple_list_item_1; myAdapterInstance = new ArrayAdapter
(this, layotID,myStringArray); myListView.setAdapter(myAdapterInstance);
SimpleCursorAdapter cho phép chúng ta load dữ liệu từ Cursor đến ListView SimpleCursorAdapter được tạo ra bằng cách truyền vào các tham số bối cảnh(context) hiện hành, một layout, một Cursor và hai giá trị: tên các cột và một mảng các giá trị chứa dữ liệu cột để hiển thị:
String uriString = “content://contacts/people/”;
Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null); String[] fromColumns = new String[] {People.NUMBER, People.NAME}; int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView};
SimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor, fromColumns,toLayoutIDs); myListView.setAdapter(myAdapter);
3 Ví dụ sử dụng INTENT để truyền dữ liệu giữa ACTIVITY :
Chúng ta có 2 lớp Activity: Activity1 và Activity2 Thiết lập 2 layout cho 2
Activities trên ứng với mỗi lớp trên sẽ có layout tuần tự sau: activity1.xml, activity2.xml
Tiếp theo đăng ký trong Manifest:
Trong Activity1.java: xử lý 2 sự kiện, nhận về giá trị được gửi từ Activity2, gọi và truyền giá trị vào Activity2
Hàm xử lý khi click Button:
Trong Activity2: xử lý 2 sự kiện, nhận về giá trị được gửi từ Activity1, gọi và truyền giá trị vào Activity1
Hàm xử lý khi click Button:
Hàm nhận giá trị: trong onCreate()
4 Kỹ thuật lưu trữ dữ liệu trên ANDROID :
Các kỹ thuật duy trì dữ liệu trong Android nhanh chóng, gọn nhẹ, hiệu quả và mạnh mẽ:
• Shared Preferences: Khi muốn lưu trữ UI state ,user preferences hay application setting, chúng ta muốn có một cơ chế gọn nhẹ để lưu trữ một tập hợp các giá trị được biết đến, Shared Preferences cho phép chúng ta lưu trữ nhóm của key/value của dữ liệu gốc
• Files: Android cho phép tạo và tải các tập tin trên thiết bị di động
• SQLite Databases: quản lý cấu trúc dữ liệu là cách tốt nhất Android cung cấp thư viện quan hệ cơ sở dữ liệu SQLite, mỗi ứng dụng có thể tạo ra một cơ sở dữ liệu của mình để nó kiểm soát hoàn toàn trên đó
• Content Providers: Thay vì theo cơ chế lưu trữ riêng ,Content Providers cung cấp nội dung cho phép đưa ra một giao diện để sử dụng và chia sẻ dữ liệu cá nhân Chúng ta có thể truy cập Content Providers để sử dụng hệ thống được phép
5 Lưu trữ dữ liệu ứng dụng một cách đơn giản :
Có hai cơ chế để lưu dữ liêu trong Android là lưu theo kiểu name/value hoặc key/value
5.1 Tạo và lưu dữ liệu với Share Preferences: Để tạo hoăc sửa đổi dữ liệu dùng Shared Preferences chúng ta gọi hàm getSharedPreferences trong ứng dụng Context,đưa vào tên SharedPreferences muốn thay đổi, Shared Preferences sẽ chia sẻ giữa các thành phần dữ liệu trong ứng dụng hiện sử dụng nó nhưng không có sẵn trong ứng dụng khác Để sửa đổi Shared Preferences Chúng ta gọi lớp SharedPreferences.Editor, nhận đối tượng Editor bằng cách gọi edit trong đối tượng ShardePreferences muốn thay đổi Để sửa, lưu gọi commit trên Editor,như đoạn code sau:
5.2 Truy xuất Shared Preferences Để lưu truy cập Shared Preferences thì cũng dùng phương thức getSharedPreferences ,đưa vào tên của Shared Preferences mà Chúng ta muốn truy cập, dùng phương thức type-safe get để trích xuất các giá trị lưu
5.2.1 Lưu trữ trạng thái Activity
Nếu muốn lưu thông tin Activity mà không cần phải chia sẻ với các thành phần khác , Chúng ta có thể gọi Activity.getPreferences(); mà không cần phải chỉ định preferences name Việc truy xuất tới SharedPreferences bị giới hạn trong phạm vi một Activity, mổi Actitvity chỉ hỗ trợ một SharedPreferences không được đặt tên
Ví dụ dùng Activity Shared Preferences:
5.2.2 Lưu trữ và phục hồi trạng thái thể hiện:
Bằng cách overriding sự kiện onSaveInstanceState của Activity, Chúng ta cóthể dùng tham số Bundle để lưu trữ các giá trị Lưu trữ các giá trị này ta dùng phương thức get() and put() như đã giới thiệu ở trên trước khi đưa vào xử lý Bundle trong lớp cha
Ví dụ thể hiện ở đoạn code sau:
Các Bundle lưu truyền trong các phương thức onRestoreInstanceState và onCreate nếu ứng dụng bắt buộc phải khởi động lại trong các session,đoạn code sau đây sẽ cho thấy làm thế nào để trích xuất giá trị từ Bundle và sử dụng chúng để cập nhật trạng thái Activity
6 Lưu và đọc tập tin trong ANDROID :
Cũng như các tiêu chuẩn java I/O các lớp và phương thức trong Android cũngcung cấp openFileInput và openFileOutput để đơn giản hóa việc đọc và viết từ những dòng và từ local file, như đoạn code dưới đây:
Nhưng phương pháp này chỉ hộ trợ các tập tin trong các thư mục ứng dụng hiện hành Nếu tập tin chúng ta chỉ định khi tạo một FileOutputStream không tồn tại, thì
Android sẽ tạo nó cho chúng ta, để thêm một tập tin hiện có thì xác định cơ chế
Theo mặc định, các tập tin được tạo ra bằng cách gọi phương thức openFileOutput để gọi tới một ứng dụng khác, ngoài ra chúng ta có thể chỉ định một
Context.MODE_WORD_READABLE hoặc Context.MODE_WORD _WRITEABLE khi tạo ra mộ tập tin có sẵn trong các ứng dụng như trong đoạn code sau:
6.1 Truy xuất dữ liệu trong Android
DEMO ỨNG DỤNG
Xây dựng chương trình
Mỗi thư mục chứa một Class khác nhau để xây dựng ứng dụng
➢ Activities chứa các activity là tầng trình diễn của ứng dụng
➢ Adapters chứa các adapter là một cầu nối giữa các View và các dữ liệu cơ bản cho View đó Một Adapter quản lý dữ liệu và ghép nối với các dòng riêng lẻ của view
➢ Broadcast chứa phản hồi các thông báo phát ra từ hệ thống
➢ Config chứa class Constans và Global
Constans dùng để chứa các hằng số tĩnh
Global dùng để chứa các biến hằng số khởi tạo VD
➢ Database chứa các Class database và SQLite lưu trữ dữ liệu vào một tập tin văn bản trên thiết bị
➢ Fragment chứa các Class Fragment là một phần của một Activity để cho phép thiết kế activity có tính mô-đun Nói cách khác nó là một sub-activity
➢ Modals chứa các class hiện thông báo tác vụ của người dùng
➢ Models chứa các Class làm việc với preference, làm việc với SQLlite
➢ Services chứa các class để 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
➢ Shared chứa các class truy suất và thay đổi các preference
➢ Utilities chứa các lớp hỗ trợ quan trọng trọng quá trình sử dụng
Application Icon
Đây chính là icon của ứng dụng sẽ hiện ra ngoài màn hình của điện thoại sau khi ứng dụng này được install, đồng thời thì icon của ứng dụng cũng sẽ hiển thị lên chợ ứng dụng khi bạn đưa ứng dụng của mình lên chợ ứng dụng
Loading Screen
Loading Screen chính là hình ảnh mà khi bạn chạy ứng dụng sẽ thấy nó, tùy thuộc vào tốc độ của ứng dụng mà thời gian Loading Screen hiển thị nhanh hay chậm khác nhau.
Ứng dụng
1 Chức năng Để xây dựng 1 phần mềm có thể đáp ứng nhu cầu của khách hang đặt ra, đảm bảo là hệ thống này cần cho người dùng tránh làm ra 1 phần mềm mà thị trường không cần thiết
Phân tích chức năng xác định các chức năng cần thiết một cách rõ ràng đầy đủ, hạn chế chi phí phân tích lại trong quá trình phát triển phần mềm
Phần mềm nghe nhạc là một phần mềm để chúng ta có thể giải quyết nhu cầu giải trí một cách hiệu quả
- Chức năng tự dò tìm bài hát: là điều đầu tiên cần nghĩ tới, chúng sẽ tìm kiếm tất cả các bài hát trong thiết bị người dùng không cần phải mất thời gian tìm kiếm bài có trong máy
- Chức năng cập nhật bài hát mới nhất: các bài hát được copy vào hoặc tải xuống từ trên mạng sẽ được thêm ngay vào ứng dụng
- Chức năng thêm vào danh mục yêu thích: các bài hát được nghe nhiều chúng ta sẽ thêm vào mục yêu thích để có thể nghe 1 cách dễ dàng mà không cần phải tìm kiếm trong danh sách
- Chức năng Album: Ứng dụng sẽ lọc các bài hát thuộc album hoặc ca sĩ nào rồi ghép chúng lại thành một album
- Chức năng danh sách phát: chúng ta có thể tạo nhiều danh sách, mỗi danh sách có một tên khác nhau giúp ta có thể lọc ra các thể loại nhạc trong máy
- Chức năng thêm sửa xóa: các bài hát, album và danh sách phát nếu chúng ta không thích có thể xóa, thêm bài hát mới vào, ngoài ra chúng ta có thể sửa tên, mô tả, album mới vào ứng dụng
- Chức năng chuyển bài hát trộn bài hát và lặp lại bài hát
Sau khi phân tích các chức năng cần có, tiếp theo chúng ta xây dựng giao diện, việc xây dựng giao diện giúp định hình một các rõ ràng hơn Đầu tiên là giao diện khi mọi người mở phần mềm:
- Gồm tên của ứng dụng
- Các page: Bài hát, Yêu thích, Albums, Danh sách
- Danh sách cách bài hát có trong máy
- Khi nhấp vào 1 trong số các bài hát thì bài hát đấy sẽ tự chạy
- Bài hát có thể chạy trên chính màn hình chọn bài để chúng ta có thể dễ dang pause cũng như next bài hát một cách dễ dàng
Giao diện chạy nhạc trong ứng dụng
- Chức năng dừng và chạy nhạc
- Chức năng chuyển bài hát và quay lại bài hát đã nghe trước đó
- Chức năng đưa bài hát đến vị trí cần nghe
- Chức năng trộn bài hát giúp chúng ta không bị nhàm chán
- Chức năng nghe một bài hát mà bạn yêu thích
Test chức năng trong ứng dụng:
Khi nhấp vào thêm vào yêu thích thì bài hát sẽ chuyển sang mục yêu thích
- Chúng ta có thể xóa bài hát mà không thích trong mục yêu thích
Khi nhấp vào thêm vào danh sách nếu chưa có danh sách thì sẽ có yêu cầu tạo một danh sách hoặc đã có thì ta sẽ chọn danh sách nào cần để vào:
- Để tạo danh sách ta cần phải điền tên danh sách (bắt buộc) miêu tả danh sách có thể điền vào có thể không
- Khi đã có danh sách thì ta thêm bài hát vào danh sách
- Các chức năng trong danh sách bao gồm chạy nhạc, thêm bài hát, sửa danh sách và xóa danh sách
+ Khi nhấp vào chạy nhạc các bài hát sẽ tự động chạy theo thứ tự
+ Thêm bài hát ứng dụng sẽ lấy tất cả bài hát có trong máy và chúng ta sẽ lựa chọn những bài hát để thêm vào danh sách
+ Sửa danh sách giống như chức năng thêm danh sách chúng ta sẽ sửa tên và mô tả theo ý thích của mình
+ Xóa danh sách tất cả bài hát trong danh sách đó sẽ bị xóa theo
Album sẽ tập hợp các bài hát có cùng một album hoặc cùng một ca sĩ sẽ được tập hợp lại và tạo thành một album
Một bài hát trong album có thể thêm vào một danh sách bất kỳ đã tạo trước đó
Giao diện khi chơi một bài hát trong danh sách trong một album
- Chức năng dừng, chuyển bài, quay lại bài hát cũ cũng như trộn bài và chạy 1 bài hát cũng được thêm vào danh sách phát
- Chức năng tắt bật loa cũng được thêm vào
Ngoài ra chúng ta có thể xóa một bài hát bất kỳ trong album đó
Ngoài ra ứng dụng còn có chức năng chơi nhạc trên thanh notification giúp chúng ta có thể dừng, chuyển bài hát và quay lại bài hát vừa đã nghe trước đó