Android传感器教程

Android传感器教程

传感器 可以用来监测设备的三维运动或环境变化。

Android提供了传感器API来处理不同类型的传感器。

Android传感器教程

传感器类型

Android支持三种类型的传感器:

1) 运动传感器

用于测量沿三个轴的加速力和旋转力。

2) 位置传感器

用于测量设备的物理位置。

3) 环境传感器

用于测量环境的变化,如温度、湿度等。

Android传感器API

Android传感器API提供了许多类和接口。传感器API的重要类和接口如下:

1) SensorManager类

android.hardware.SensorManager 类提供了以下方法:

  • 获取传感器实例,
  • 访问和列出传感器,
  • 注册和注销传感器监听器等。

您可以通过调用getSystemService()方法并将SENSOR_SERVICE常量传递给它来获取SensorManager的实例。

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);

2) 传感器类

android.hardware.Sensor 类提供了获取传感器信息的方法,例如传感器名称、传感器类型、传感器分辨率等。

3) 传感器事件类

其实例由系统创建。它提供有关传感器的信息。

4) 传感器事件监听接口

它提供了两个回调方法,用于获取传感器值 (x、y 和 z) 更改或传感器精度更改的信息。

公共和抽象方法 描述
void onAccuracyChanged(Sensor sensor, int accuracy) 当传感器的精度发生变化时调用此方法。
void onSensorChanged(SensorEvent event) 当传感器的值发生变化时调用此方法。

Android简单的传感器应用示例

让我们看看两个传感器示例。

  1. 打印x、y和z轴值的传感器示例。在这里,我们将要看到这个。
  2. 当设备被摇晃时改变背景颜色的传感器示例。点击以 改变活动传感器示例的背景颜色

activity_main.xml

这个文件中只有一个TextView。

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

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="92dp"
        android:layout_marginTop="114dp"
        android:text="TextView" />

</RelativeLayout>

Activity类

让我们编写代码,打印出x轴、y轴和z轴的值。

package com.example.sensorsimple;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.hardware.SensorEvent;
import android.hardware.Sensor;
import java.util.List;
public class MainActivity extends Activity {
    SensorManager sm = null;
    TextView textView1 = null;
    List list;

    SensorEventListener sel = new SensorEventListener(){
        public void onAccuracyChanged(Sensor sensor, int accuracy) {}
        public void onSensorChanged(SensorEvent event) {
            float[] values = event.values;
            textView1.setText("x: "+values[0]+"\ny: "+values[1]+"\nz: "+values[2]);
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        /* Get a SensorManager instance */
        sm = (SensorManager)getSystemService(SENSOR_SERVICE);

        textView1 = (TextView)findViewById(R.id.textView1);

        list = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
        if(list.size()>0){
            sm.registerListener(sel, (Sensor) list.get(0), SensorManager.SENSOR_DELAY_NORMAL);
        }else{
            Toast.makeText(getBaseContext(), "Error: No Accelerometer.", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void onStop() {
        if(list.size()>0){
          sm.unregisterListener(sel);
        }
        super.onStop();
    }
}

输出:

Android传感器教程

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程