Cảm biến (Sensor) trong Android và các ví dụ

Đăng bởi: Admin | Lượt xem: 4921 | Chuyên mục: Android

Hầu hết các thiết bị Android đều có cảm biến tích hợp để đo chuyển động, định hướng và các điều kiện môi trường khác nhau. Các cảm biến này sẽ cung cấp dữ liệu thô với độ chính xác cao và rất hữu ích để theo dõi chuyển động của thiết bị ba chiều hoặc định vị hoặc theo dõi các thay đổi trong môi trường xung quanh gần thiết bị.


1. Giới thiệu Sensor trong Android

Ví dụ: để báo các thay đổi trong môi trường, ứng dụng thời tiết có thể sử dụng cảm biến nhiệt độ và cảm biến độ ẩm hoặc ứng dụng travel có thể sử dụng cảm biến từ trường địa từ và gia tốc kế để báo cáo hướng la bàn, v.v.

 

Android chủ yếu hỗ trợ ba loại cảm biến,

 

thể loại

Sự miêu tả

Cảm biến chuyển động (Motion Sensors)

Những cảm biến này rất hữu ích để đo lực gia tốc và lực quay dọc theo ba trục. Bao gồm gia tốc kế, cảm biến trọng lực, con quay hồi chuyển và cảm biến vectơ quay.

Cảm biến môi trường (Environmental Sensors)

Những cảm biến này rất hữu ích để đ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. Bao gồm áp kế, quang kế và nhiệt kế.

Cảm biến vị trí (Position Sensors)

Những cảm biến này rất hữu ích để đo vị trí vật lý của thiết bị. Bao gồm cảm biến định hướng và từ kế.

Android cung cấp một framework gọi là sensor framework để truy cập tất cả các cảm biến có sẵn trên thiết bị và để lấy tất cả dữ liệu cảm biến thô. Sensor framework cung cấp nhiều loại nhiệm vụ liên quan đến cảm biến. Ví dụ: bằng cách sử dụng  sensor framework, chúng ta có thể thực hiện:

 

  • Nó liệt kê tất cả các cảm biến có sẵn trên thiết bị
  • Nó xác định khả năng của từng cảm biến, 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.
  • Nó có thể thu được dữ liệu cảm biến thô và xác định tốc độ tối thiểu mà bạn có được dữ liệu cảm biến.
  • Đăng ký và hủy đăng sự kiện lắng nghe cảm biến, theo dõi, thay đổi cảm biến.

Sensor framework sẽ cho phép chúng ta truy cập vào nhiều loại cảm biến, một số cảm biến này dựa trên phần cứng và một số dựa trên phần mềm. Các cảm biến dựa trên Phần cứng là các thành phần vật lý được xây dựng trên thiết bị cầm tay hoặc máy tính bảng và Cảm biến dựa trên Phần mềm không phải là thiết bị vật lý nhưng chúng bắt chước các cảm biến dựa trên Phần cứng.

 

Sensor framework Android đã cung cấp các lớp và giao diện sau để truy cập cảm biến thiết bị và thu thập dữ liệu cảm biến thô.

 

Lớp

Miêu tả

SensorManager

Bằng cách sử dụng lớp này, chúng ta có thể tạo một thể hiện của sensor service và lớp này cung cấp 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ý nghe sự kiện cảm biến và có được thông tin định hướng.

Sensor

Bằng cách sử dụng lớp này, chúng ta có thể tạo một thể hiện của một cảm biến cụ thể và lớp này cung cấp các phương thức khác nhau cho phép bạn xác định khả năng của cảm biến.

SensorEvent

Hệ thống sử dụng lớp này để tạo một đối tượng sự kiện cảm biến và nó cung cấp 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à dấu thời gian cho sự kiện.

SensorEventListener

Chúng ta có thể sử dụng giao diện này để tạo hai phương thức callback 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.

2. Xác định danh sách các cảm biến có sẵn

Sau đây là đoạn mã xác định và liệt kê tất cả các cảm biến có sẵn trên thiết bị, kiểm tra xem loại cảm biến cụ thể có tồn tại hay không và theo dõi sự kiện thay đổi cảm biến bằng các lớp trong sensor framework.

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private SensorManager mgr;
    private Sensor sensor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mgr = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        sensor = mgr.getDefaultSensor(Sensor.TYPE_LIGHT);
        List<Sensor> deviceSensors = mgr.getSensorList(Sensor.TYPE_ALL);
    }
    @Override
    public final void onAccuracyChanged(Sensor sensor, int accuracy) {
        // Do something here if sensor accuracy changes.
    }
    @Override
    public final void onSensorChanged(SensorEvent event) {
        // Do something with this sensor value.
    }
    @Override
    protected void onResume() {
        super.onResume();
        mgr.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }
}

Nếu bạn quan sát đoạn mã trên, chúng ta đã sử dụng các lớp trong sensor framework để liệt kê tất cả các cảm biến có sẵn trên thiết bị và theo dõi các thay đổi của sự kiện cảm biến dựa trên yêu cầu.

 Bây giờ chúng ta sẽ xem cách sử dụng sensor framework để lấy danh sách các cảm biến có sẵn trên thiết bị Android với các ví dụ.

3. Ví dụ về cảm biến Android

Sau đây là ví dụ về việc xác định các cảm biến và liệt kê tất cả các cảm biến có sẵn trên thiết bị bằng sensor framework Android.

 Tạo một ứng dụng Android mới bằng cách sử dụng studio android và đặt tên là SensorExample  

Khi chúng ta tạo một ứng dụng, hãy mở tệp activity_main.xml từ đường dẫn thư mục \ res \ layout và viết mã như dưới đây.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TextView
    android:id="@+id/sensorslist"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="80dp"
    android:text="Sensors"
    android:textSize="20dp"
    android:textStyle="bold"
    android:layout_gravity="center"
    android:visibility="gone"/>
</LinearLayout>

MainActivity.java

package com.tutlane.sensorsexample;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private SensorManager mgr;
    private TextView txtList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mgr = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
        txtList = (TextView)findViewById(R.id.sensorslist);
        List<Sensor> sensorList = mgr.getSensorList(Sensor.TYPE_ALL);
        StringBuilder strBuilder = new StringBuilder();
        for(Sensor s: sensorList){
            strBuilder.append(s.getName()+"\n");
        }
        txtList.setVisibility(View.VISIBLE);
        txtList.setText(strBuilder);
    }
}

Nếu bạn quan sát mã ở trên, chúng ta đã sử dụng lớp SensorManager để xác định và nhận danh sách các cảm biến có sẵn trên thiết bị.

Ví dụ đầu ra của cảm biến Android

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Android

Học Kotlin cơ bản
Số bài học:
Lượt xem: 17551
Đăng bởi: Admin
Chuyên mục: Android

Học lập trình Flutter cơ bản
Số bài học:
Lượt xem: 58287
Đăng bởi: Admin
Chuyên mục: Android

Lập trình Android cơ bản
Số bài học:
Lượt xem: 22924
Đăng bởi: Admin
Chuyên mục: Android