android传感器教程

本文概述

传感器可用于监视三维设备的移动或设备环境的变化。

Android提供了传感器api以与不同类型的传感器一起使用。


传感器类型

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)SensorEvent类

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

4)SensorEventListener接口

当传感器值(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>

活动类

让我们编写代码来打印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();
	}
}

输出:

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?