您的位置:首页 > 移动开发 > Android开发

Android的传感器开发技术

2016-01-19 10:58 429 查看
package com.gst.user.application;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorEventListener2;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;

import java.util.List;

public class SensorActivity extends AppCompatActivity implements SensorEventListener{

private TextView tvAccelerometer;
private TextView tvMagentic;
private TextView tvLight;
private TextView tvOrientation;
private TextView tvSensors;
private SensorManager sensorManager;
private float[] accelerometerValues;
private float[] geomagneticValues;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});

sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);

sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_FASTEST);

sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT),
SensorManager.SENSOR_DELAY_FASTEST);

sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_FASTEST);

tvAccelerometer = (TextView) findViewById(R.id.tvAccelerometer);
tvMagentic = (TextView) findViewById(R.id.tvMagentic);
tvLight = (TextView) findViewById(R.id.tvLight);
tvOrientation = (TextView) findViewById(R.id.tvOrientation);
tvSensors = (TextView) findViewById(R.id.tvSensors);

List<Sensor> sensors=sensorManager.getSensorList(Sensor.TYPE_ALL);
for (Sensor sensor:sensors){
tvSensors.append(sensor.getName() + "\n");
}
}

@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
String accelerometer = "加速度\n" + "X:" + event.values[0] + "\n"
+ "Y:" + event.values[1] + "\n" + "Z:"
+ event.values[2] + "\n";
tvAccelerometer.setText(accelerometer);
accelerometerValues = event.values.clone();
break;
case Sensor.TYPE_LIGHT:
tvLight.setText("亮度:" + event.values[0]);

break;
case Sensor.TYPE_MAGNETIC_FIELD:
String magentic = "磁场\n" + "X:" + event.values[0] + "\n" + "Y:"
+ event.values[1] + "\n" + "Z:" + event.values[2]
+ "\n";
tvMagentic.setText(magentic);
geomagneticValues = event.values.clone();

break;

case Sensor.TYPE_ORIENTATION:
if (geomagneticValues != null && accelerometerValues != null) {

float[] R = new float[16];
float[] I = new float[16];
float[] outR = new float[16];

sensorManager.getRotationMatrix(R, I, accelerometerValues,
geomagneticValues);
sensorManager.remapCoordinateSystem(R,
SensorManager.AXIS_X, SensorManager.AXIS_Y, outR);

float[] actual_orientation = new float[3];
actual_orientation = sensorManager.getOrientation(outR, actual_orientation);

String orientation = "方向\n" + "X:" + event.values[0] + "\n"
+ "Y:" + event.values[1] + "\n" + "Z:"
+ event.values[2] + "\n";
tvOrientation.setText(orientation);

}
}

}

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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: