当前位置:操作系统 > 安卓/Android >>

Android常用传感器

在上文中介绍了加速度传感器,并以真机和模拟器两种方式进行了测试。在本文中将介绍其余几种传感器,它们的处理方式完全一样。这里就只用真机进行测试了。
 
1、方向传感器:返回三个角度
 
第一个角度:表示手机顶部朝向与正北方的夹角。范围0~360
 
第二个角度:表示手机顶部或尾部翘起的角度。范围-180~180
 
第三个角度:表示手机左侧或右侧翘起的角度。范围-90~90
 
2、磁场传感器:返回三个数据,分别代表周围磁场分解到X、Y、Z三个方向上的分量。
 
3、温度传感器:返回一个数据,表示手机设备周围温度。
 
4、光传感器:返回一个数据,表示手机设备周围的光的强度。
 
5、压力传感器:返回一个数据,表示手机设备周围的压力大小。
 
下面用一个简单示例来演示它们的使用,代码如下:
 
Activity:
 
 
package com.home.sensor;  
  
import android.hardware.Sensor;  
import android.hardware.SensorEvent;  
import android.hardware.SensorEventListener;  
import android.hardware.SensorManager;  
import android.os.Bundle;  
import android.widget.EditText;  
import android.app.Activity;  
  
public class SensorTestActivity extends Activity implements SensorEventListener {  
    // 定义真机的传感器管理器   
    private SensorManager mSensorManager;  
    private EditText orientation;  
    private EditText magnetic;  
    private EditText temerature;  
    private EditText light;  
    private EditText pressure;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        // 获取界面上的EditText组件   
        orientation = (EditText) findViewById(R.id.main_et_orientation);  
        magnetic = (EditText) findViewById(R.id.main_et_magnetic);  
        temerature = (EditText) findViewById(R.id.main_et_temerature);  
        light = (EditText) findViewById(R.id.main_et_light);  
        pressure = (EditText) findViewById(R.id.main_et_pressure);  
        // 获取真机的传感器管理服务   
        mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);  
    }  
  
    @Override  
    protected void onResume() {  
        super.onResume();  
        // 为系统的方向传感器注册易做图   
        mSensorManager.registerListener(this,  
                mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),  
                SensorManager.SENSOR_DELAY_GAME);  
        // 为系统的磁场传感器注册易做图   
        mSensorManager.registerListener(this,  
                mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),  
                SensorManager.SENSOR_DELAY_GAME);  
        // 为系统的温度传感器注册易做图   
        mSensorManager.registerListener(this,  
                mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE),  
                SensorManager.SENSOR_DELAY_GAME);  
        // 为系统的光传感器注册易做图   
        mSensorManager.registerListener(this,  
                mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),  
                SensorManager.SENSOR_DELAY_GAME);  
        // 为系统的压力传感器注册易做图   
        mSensorManager.registerListener(this,  
                mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),  
                SensorManager.SENSOR_DELAY_GAME);  
    }  
  
    @Override  
    protected void onPause() {  
        super.onPause();  
        // 程序暂停时取消注册传感器易做图   
        mSensorManager.unregisterListener(this);  
    }  
  
    @Override  
    public void onAccuracyChanged(Sensor sensor, int accuracy) {  
    }  
  
    @Override  
    public void onSensorChanged(SensorEvent event) {  
        float[] values = event.values;  
        StringBuffer sb = null;  
        switch (event.sensor.getType()) {  
        // 方向传感器   
        case Sensor.TYPE_ORIENTATION:  
            sb = new StringBuffer();  
            sb.append("绕Z轴转过的角度:" + values[0]);  
            sb.append("\n绕X轴转过的角度:" + values[1]);  
            sb.append("\n绕Y轴转过的角度:" + values[2]);  
            orientation.setText(sb.toString());  
            break;  
        // 磁场传感器   
        case Sensor.TYPE_MAGNETIC_FIELD:  
            sb = new StringBuffer();  
            sb.append("X方向上的磁场分量:" + values[0]);  
            sb.append("\nY方向上的磁场分量:" + values[1]);  
            sb.append("\nZ方向上的磁场分量:" + values[2]);  
            magnetic.setText(sb.toString());  
            break;  
        // 温度传感器   
        case Sensor.TYPE_TEMPERATURE:  
            sb = new StringBuffer();  
            sb.append("当前温度为:" + values[0]);  
            temerature.setText(sb.toString());  
            break;  
        // 光传感器   
        case Sensor.TYPE_LIGHT:  
            sb = new StringBuffer();  
            sb.append("当前光的强度:" + values[0]);  
            light.setText(sb.toString());  
            break;  
        // 压力传感器   
        case Sensor.TYPE_PRESSURE:  
            sb = new StringBuffer();  
            sb.append("当前压力为:" + values[0]);  
            pressure.setText(sb.toString());  
            break;  
        }  
    }  
}  

package com.home.sensor;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.EditText;
import android.app.Activity;

public class SensorTestActivity extends Activity implements SensorEventListener {
// 定义真机的传感器管理器
private SensorManager mSensorManager;
private EditText orientation;
private EditText magnetic;
private EditText temerature;
private EditText light;
private EditText pressure;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取界面上的EditText组件
orientation = (EditText) findViewById(R.id.main_et_orientation);
magnetic = (EditText) findViewById(R.id.main_et_magnetic);
temerature = (EditText) findViewById(R.id.main_et_temerature);
light = (EditText) findViewById(R.id.main_et_light);
pressure = (EditText) findViewById(R.id.main_et_pressure);
// 获取真机的传感器管理服务
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
}

@Override
protected void onResume() {
super.onResume();
// 为系统的方向传感器注册易做图
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
// 为系统的磁场传感器注册易做图
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_GAME);
// 为系统的温度传感器注册易做图
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_TEMPERATURE),
SensorManager.SENSOR_DELAY_GAME);
// 为系统的光传感器注册易做图
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_GAME);
// 为系统的压力传感器注册易做图
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE),
SensorManager.SENSOR_DELAY_GAME);
}

@Override
protected void onPause() {
super.onPause();
// 程序暂停时取消注册传感器易做图
mSensorManager.unregisterListener(this);
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

@Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
StringBuffer sb = null;
switch (event.sensor.getType()) {
// 方向传感器
case Sensor.TYPE_ORIENTATION:
sb = new StringBuffer();
sb.append("绕Z轴转过的角度:" + values[0]);
sb.append("\n绕X轴转过的角度:" + values[1]);
sb.append("\n绕Y轴转过的角度:" + values[2]);
orientation.setText(sb.toStri
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,