+2

Sơ lược về Sensors trong Android.

Chào các bạn, hôm nay định đăng bài android khác, nhưng vào thấy blog không hiểu sao vào cái ngày cuối cùng này không vào được. Loanh quanh tý nhớ ra mấy đợt trước đọc qua thấy cái chủ đề này khá là hay nên muốn chia sẻ với các bạn ngay và luôn. 😄 Như tiêu đề, tôi xin được chia sẻ luôn chút hiểu biết ít ít của mình về nó.

Android cung cấp SensorManager và class Sensor để sử dụng các cảm biển trong ứng dung của chúng ta. Để sử dụng Sensor đầu tiên chúng ta cần khởi tạo đối tượng của SensorManager class:

SensorManager sMgr;
sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);

Tiếp theo chúng ta cần khởi tạo đối tượng của lớp Sensor bằng cách gọi getDefaultSensor() của lớp SensorManager:

Sensor light;
light = sMgr.getDefaultSensor(Sensor.TYPE_LIGHT);

Sau khi sensor được khai báo chúng ta có thể đăng ký listener và overrode hai method là onAccuracyChanged and onSensorChanged. Cú pháp như sau:

sMgr.registerListener(this, light,SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
}

Hoặc có thể lấy danh sách các được danh sách các sensor chúng ta chỉ cần gọi:

sMgr = (SensorManager)this.getSystemService(SENSOR_SERVICE);
List<Sensor> list = sMgr.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor: list){
}

Nó trả về một list các sensor trả về cùng với các thông tin của nó.

Sau đây chúng ta cùng làm một ví dụ để hiểu rõ hơn về Sensor, trong ví dụ này chúng ta sẽ cùng nhau lấy ra danh sách các bộ cảm biến có trên thiết bị của chúng ta. Trước tiên chúng ta cần tạo một project với tên SensorAndroid., package com.framgia.sensorandroid. Tiếp theo chúng ta code cho file layout chính(ở đây của tôi là file fragment_main):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sensor "
        android:textSize="35dp" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

</LinearLayout>

Code tiếp cho class chính: MainActivity.java Class này sẽ lấy tất cả các cảm biến có trên thiết bị và in ra tên, vendor và version của nó.

package com.framgia.sensorandroid;

import java.util.List;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
	   TextView tv1=null;
	   private SensorManager mSensorManager;
	   @Override

	   protected void onCreate(Bundle savedInstanceState) {
	      super.onCreate(savedInstanceState);
	      setContentView(R.layout.fragment_main);

	      tv1 = (TextView) findViewById(R.id.textView2);
	      tv1.setVisibility(View.GONE);

	      mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
	      List<Sensor> mList= mSensorManager.getSensorList(Sensor.TYPE_ALL);

	      if(mList.isEmpty()) return;

	      for (int i = 1; i < mList.size(); i++) {
	         tv1.setVisibility(View.VISIBLE);
	         tv1.append("\n" + mList.get(i).getName() + "\n" + mList.get(i).getVendor() + "\n" + mList.get(i).getVersion());
	      }
	   }

	   @Override
	   public boolean onOptionsItemSelected(MenuItem item) {
	      int id = item.getItemId();

	      //noinspection SimplifiableIfStatement
	      if (id == R.id.action_settings) {
	         return true;
	      }
	      return super.onOptionsItemSelected(item);
	   }
	}

Vậy là đã xong, bạn có thể build ra và xem kết quả. Bởi không có thiết bị để test với thử nghiệm nhiều method của nó hơn nữa nên có lẽ mình sẽ tạm dừng ở đây, hôm nào có thiết bị sẽ tim hiểu thêm, nếu hot nhất định sẽ chia sẻ với các bạn 😄. Hôm nào có thời gian chắc phải ngâm cứu thêm, có lương khéo máu máu mua bộ cảm biến về nghịch cho vui. 😄 Theo mình nghĩ nó chắc sẽ có rất nhiều ứng dụng thực tiễn. 😃

Nếu bạn làm theo các bước trên mà không chạy thi có thể lấy code của mình về chạy thử:

Chúc các bạn 1 ngày làm việc vui vẻ 😃


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.