Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Xây dựng các ứng dụng với cảm biến môi trường

by
Difficulty:IntermediateLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Andrea Ho (you can also view the original English article)

Tìm hiểu cách sử dụng cảm biến môi trường của Android để phát hiện thông tin về môi trường của người dùng, bao gồm nhiệt độ, áp suất, độ ẩm và ánh sáng xung quanh.

Hệ thống Android hỗ trợ một loạt các cảm biến thiết bị, một số được triển khai trong phần cứng và một số phần mềm. cảm biến môi trưởng là tất cả các tính năng phần cứng, cung cấp quyền truy cập vào thông tin về nhiệt độ, áp suất, độ ẩm và ánh sáng xung quanh. Các cảm biến này trả về các giá trị như sau: nhiệt độ được đo bằng độ C, áp suất khí quyển tính bằng hPa millibars, độ ẩm không khí tương đối xung quanh dưới dạng giá trị phần trăm và ánh sáng xung quanh tính theo đơn vị SI lux. Trong hướng dẫn này, chúng tôi sẽ thực hiện quy trình cơ bản để sử dụng 4 cảm biến môi trường chính này. Chúng tôi sẽ không sử dụng cảm biến nhiệt độ của thiết bị, vì hiện tại nó không còn được sử dụng cho Android 4.0.

Có nhiều ứng dụng khả thi cho các cảm biến này, chẳng hạn như áp kế và nhiệt kế. Bạn có thể đã bắt gặp các ứng dụng như vậy trong Google Play, nhưng điều đáng chú ý là chúng có thể cần phải thực hiện các chức năng của chúng bằng cảm biến môi trưởng. Ví dụ: các ứng dụng thời tiết thường sử dụng dữ liệu vị trí được tìm nạp trên Web để xác định thông tin môi trường dựa trên vị trí của bạn.

Vì các cảm biến này được cung cấp thông qua phần cứng của người dùng, sự hỗ trợ khác nhau giữa các thiết bị và nhà sản xuất. Tại thời điểm bài viết, rất ít điện thoại thông minh hoặc máy tính bảng Android hỗ trợ tất cả các cảm biến môi trưởng, nhưng nhiều mẫu gần đây hỗ trợ một hoặc nhiều trong số chúng. Điều quan trọng là phải tiến hành kiểm tra xem người dùng có cảm biến cụ thể hay không và tránh sử dụng chức năng hoàn toàn phụ thuộc vào chúng. Ngoại lệ duy nhất cho điều này là nếu bạn đảm bảo chỉ những người dùng có phần cứng cần thiết mới có thể tải xuống ứng dụng của bạn - bạn có thể thực hiện việc này bằng các bộ lọc cho một ứng dụng được liệt kê trong cửa hàng Google Play.


Bước 1: Tạo một dự án Android mới

Tạo một dự án Android mới trong Eclipse và đặt tên theo lựa chọn của bạn. Hãy để Eclipse tạo ra một Activity chính, vì đây là class duy nhất chúng ta cần. Đối với code được sử dụng trong hướng dẫn này, chúng tôi đang hướng đến API Android bậc 14 (Android 4.0 - Ice Cream Sandwich), nhưng bạn có thể hướng đến một phiên bản mới hơn nếu bạn muốn. Bạn không cần thực hiện bất kỳ thay đổi nào đối với file Manifest. Class Activity chính của bạn phải có cấu trúc ban đầu như sau, với tên class dp bạn chọn:

Chúng tôi sẽ triển khai một vài Interface, vậy hãy mở rộng dòng khai báo class mở của bạn như sau:

Click listener dành cho tương tác người dùng và click listener của cảm biến dùng nhận dữ liệu từ các cảm biến của thiết bị. Eclipse sẽ cung cấp các câu lệnh import cho các class Activity và Bundle, nhưng bạn cũng cần bổ sung các mục sau vào danh sách:

Chúng tôi sẽ bổ sung code vào class sau đó.


Bước 2: Thiết kế tương tác người dùng

Để chứng minh quy trình cơ bản để sử dụng bộ cảm biến môi trường, chúng tôi sẽ xây dựng một giao diện người dùng đơn giản. Ứng dụng sẽ hiển thị danh sách có 4 nút, mỗi nút cho mỗi cảm biến chúng ta sẽ sử dụng. Khi người dùng chọn một nút, ứng dụng sẽ cố gắng truy xuất thông tin phù hợp và hiển thị thông tin đó trong Text View. Trước tiên, hãy xác định một số String văn bản mà chúng tôi sẽ sử dụng trong giao diện. Mở file "res/value/String.xml" và chỉnh sửa theo nội dung sau:

Chúng đại diện cho tiêu đề, nội dung giới thiệu, nhãn tên cho nút và giữ placeholder cho Text Views. Chúng tôi sẽ sử dụng một vài tài nguyên có thể rút ra cho thiết kế, nhưng bạn có thể bỏ qua chúng nếu muốn. Để sử dụng chúng, trong mỗi thư mục drawables của ứng dụng, bạn sẽ cần tạo ra hai file bổ sung là "back.xml" và "btn.xml" (lần lượt chọn từng thư mục drawable và chọn "File" > "New" > "File", sau đó nhập tên file). Đối với file "back.xml", nhập code sau đây:

Đối với file "btn.xml", nhập thông tin sau:

Mặt sau drawable là dành cho nền Activity và drawable "btn" dành cho các nền của button. Vui lòng thay đổi các thiết kế này theo bất kỳ cách nào bạn muốn - đảm bảo bạn copy chúng vào từng thư mục drawable trong ứng dụng của bạn.

Bây giờ hãy mở file bố cục "main.xml" của ứng dụng của bạn (res/layout/main.xml). Nhập Scroll View và Linear Layout như sau:

Bên trong Linear Layout, bổ sung phần giới thiệu, sau đó là Button và Text View cho từng cảm biến:

Mỗi cặp Button và Text View gần như giống hệt nhau, với các thuộc tính ID để xác định chúng trong code của Java. Tất nhiên, bạn có thể thay đổi bất kỳ yếu tố thiết kế nào nếu muốn. Bố cục đề cập đến các tài nguyên drawable và Strings.


Bước 3: Xử lý tương tác người dùng

Mở class Activity chính trong ứng dụng của bạn. Ở trên cùng phần khai báo class, trước phương thức "onCreate", bổ sung các biến đối tượng như sau:

Chúng đại diện cho các Button và Text Views mà chúng tôi đã tạo trong bố cục. Chúng tôi sẽ sử dụng một mảng để theo dõi các mục Text View, vì các mục này sẽ cập nhật thông tin do các cảm biến trả về, vì vậy hãy bổ sung biến mảng sau:

Bây giờ bổ sung các hằng số này để tham chiếu đến từng loại cảm biến:

Bên trong phương thức "onCreate", sau dòng thiết lập view, truy xuất tham chiếu đến từng button bằng các thuộc tính ID mà chúng tôi đưa vào bố cục, như sau:

Bây giờ, thiết lập từng cái để sử dụng class Activity làm click listener:

Khi các button này được nhấn, phương thức "onClick" sẽ hoạt động. Tiếp theo, truy xuất các mục Text View và bổ sung một tham chiếu cho từng mục trong mảng chúng tôi đã khai báo, hãy dùng các hằng số để xác định cho mỗi index:

Bây giờ chúng tôi cần cung cấp phương thức "onClick", bổ sung nó vào class sau phương thức "onCreate":

Trong phương thức này, chúng ta cần xác định nút nào đã nhấp bằng điều kiện:

Trong mỗi button này, chúng tôi sẽ cố gắng lấy dữ liệu môi trường liên quan.


Bước 4: Thiết lập cảm biến môi trường

Ở đầu class, bổ sung một vài biến cho quá trình cảm nhận biết môi trường:

Quay lại phương thức "onCreate", sau khi code hiện có, bổ sung phần sau đây để tạo một instance của class Sensor Manager:

Chúng tôi cần Sensor Manager cho tất cả các quy trình nhận biết môi trường. Chúng tôi sử dụng nó để lấy cảm biến cụ thể. Bên trong câu lệnh "onClick" phương thức "if" cho nhiệt độ môi trường, hãy cố gắng truy xuất cảm biến nhiệt độ môi trường như sau:

Bây giờ chúng ta cần quan tâm đến các trường hợp các thiết bị người dùng không cung cấp cảm biến, vì vậy hãy bổ sung test sau đây:

Chúng tôi chỉ đơn giản là xuất một thông báo lỗi. Nếu có cảm biến, chúng ta cần đăng ký để nhận dữ liệu mà nó trả về, vì vậy hãy bổ sung vào sau câu lệnh "if" dưới đây:

Bây giờ thực hiện quy trình tương tự cho từng button trong phương thức "onClick". Đối với light button (trong câu lệnh "if" bên trong "onClick"):

Lưu ý rằng ở đây chúng tôi đang yêu cầu cảm biến "TYPE_LIGHT" và đang điều chỉnh thông báo lỗi theo loại cảm biến. Đối với button pressure (áp lực):

Cuối cùng, trong câu lệnh "if" cho button humidity (độ ẩm):


Bước 5: Truy xuất dữ liệu chính xác

Ngoài việc trả về dữ liệu môi trường được yêu cầu, cảm biến cũng sẽ trả về dữ liệu chính xác. Thêm phương thức sau vào class của bạn, nó sẽ được yêu cầu khi triển khai Sensor Event Listener Interface:

Trong phương thức, hãy bắt đầu xây dựng một thông báo liên quan đến độ chính xác:

Chúng tôi sẽ sử dụng một câu lệnh switch trên tham số nguyên chính xác được truyền qua:

Chúng tôi điều chỉnh thông báo theo mức độ chính xác của cảm biến, sử dụng class Sensor Manager. Xuất ra độ chính xác khi nhận được như sau, nhưng sau câu lệnh switch:

Bên trong phương thức "onAccuracyChanged", bạn cũng có thể xác định loại cảm biến từ tham số đã truyền vào nếu bạn cần.


Bước 6: Truy xuất dữ liệu của cảm biến

Bây giờ sau cùng chúng tôi cũng có thể truy xuất dữ liệu được trả về từ các cảm biến bằng Sensor Event - chúng tôi thực hiện điều này trong phương thức "onSensorChanged", cũng được yêu cầu để triển khai Interface:

Event Sensor trả về dữ liệu của nó theo các cách khác nhau tùy thuộc vào loại cảm biến. Đối với tất cả 4 loại chúng tôi đang sử dụng, nó được truy xuất theo cùng một cách, từ phần tử đầu tiên trong một mảng gồm các giá trị float. Bổ sung phần sau đây vào phương thức:

Bây giờ chúng tôi sẽ xây dựng một text String bao gồm dữ liệu này và viết nó vào Text View có liên quan để người dùng xem. Đầu tiên, chúng tôi tạo một biến Text View và cung cấp cho một giá trị mặc định (giá trị này sẽ được ghi đè - chúng tôi bao gồm nó để khiến Eclipse vui vẻ):

Tiếp theo, chúng tôi khai báo String:

Nội dung của String sẽ phụ thuộc vào kiểu cảm biến, vì vậy hãy tìm hiểu xem đó là loại cảm biến nào:

Bây giờ chúng ta có thể sử dụng một câu lệnh switch trên giá trị này:

Trong mỗi trường hợp, chúng tôi xây dựng Chuỗi thông tin bằng cách sử dụng giá trị cảm biến được lấy và đoạn trích văn bản có liên quan đến loại. Chúng tôi cũng đặt Text View cho mục giao diện người dùng có liên quan bằng cách sử dụng mảng và hằng. Sau câu lệnh switch, xuất thông tin:

Bây giờ hãy tái thiết lập biến cảm biến và dừng lắng nghe các bản cập nhật để giảm việc sử dụng pin không cần thiết:

Cuối cùng, chúng tôi không muốn ứng dụng sử dụng các tài nguyên không cần thiết khi bị tạm dừng, vì vậy hãy bổ sung phương thức này vào class:


Bước 7: Hãy dùng thử

Đó là ứng dụng bản demo hoàn tất! Không có cách nào chạy ứng dụng này trên trình giả lập Android mặc định, vì nó không cung cấp cảm biến môi trưởng. Tuy nhiên, bạn có thể chạy nó trên một thiết bị thực tế hoặc sử dụng công cụ Sensor Simulator, giúp bạn mô phỏng các khía cạnh nhất định của môi trường. Sau đây là ảnh chụp màn hình của ứng dụng chạy trên Samsung Galaxy S III ngay sau khi lấy dữ liệu ánh sáng và áp suất:

Đây là 2 cảm biến khác không được hỗ trợ:


Tổng kết

Cảm biến môi trường là một tính năng thú vị nhưng vẫn đang phát triển của nền tảng Android. Tuy nhiên, việc tập trung vào chúng vẫn hơi sớm một chút. Nếu bạn muốn khám phá cách sử dụng các cảm biến này theo những cách nâng cao hơn, hãy xem phần Developer Guide về cách tính điểm sương và độ ẩm tuyệt đối dựa trên độ ẩm tương đối và nhiệt độ môi trường xung quanh. Ngoài ra hãy cố gắng kiên nhẫn!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.