标签:
1. 光照传感器
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/light_level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
MainActivity.java
package liqing.lightsensortest; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private SensorManager sensorManager; private TextView lightLevel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lightLevel = (TextView) findViewById(R.id.light_level); //获取系统传感器的管理器 sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //得到 光照传感器 Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); // 光照传感器注册(register)监听,参数为(SensorEventListener实例,传感器对象,输出信息速率) sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL); } private SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float value = event.values[0]; lightLevel.setText("Current light level is " + value + " lx "); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onDestroy() { super.onDestroy(); if (sensorManager != null) { //注销监听 sensorManager.unregisterListener(listener); } } }
2. 加速器传感器(摇一摇)
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/light_level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity { private SensorManager sensorManager; private TextView lightLevel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lightLevel = (TextView) findViewById(R.id.light_level); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //得到 accelerometer(加速器)传感器 Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL); } private SensorEventListener listener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { //方向传感器SensorEvent的取值有X轴,Y轴,Z轴,去绝对值Math.abs() float x = Math.abs(event.values[0]); float y = Math.abs(event.values[1]); float z = Math.abs(event.values[2]); if (x > 15 || y > 15 || z > 15) { lightLevel.setText("摇一摇 "); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onDestroy() { super.onDestroy(); if (sensorManager != null) { //注销监听 sensorManager.unregisterListener(listener); } } }
3.方向传感器(赛车游戏控制方向) 使用加速传感器和地磁传感器,通过getRotationMatrix()和getOrientation()得到XYZ旋转值
main_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/light_level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
MainActivity.java
package liqing.lightsensortest; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private SensorManager sensorManager; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.light_level); sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); //得到 accelerometer(加速器)传感器 Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //带到 magnetic_FIELD(地磁的_领域)传感器 Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); //注意(SENSOR_DELAY_GAME)传感器的速率改变的相当快 sensorManager.registerListener(listener, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME); sensorManager.registerListener(listener, magneticSensor, SensorManager.SENSOR_DELAY_GAME); } private SensorEventListener listener = new SensorEventListener() { float[] accelerometerValues = new float[3]; float[] magneticValues = new float[3]; @Override public void onSensorChanged(SensorEvent event) { //注意SensorEvent是所以传感器的信息(包括类型和值) switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: //clone()克隆 accelerometerValues = event.values.clone(); break; case Sensor.TYPE_MAGNETIC_FIELD: //clone()克隆 magneticValues = event.values.clone(); break; default: break; } float[] R = new float[9];//矩阵的值 float[] values = new float[3];//X,Y,Z旋转的值 //getRotationMatrix(得到旋转矩阵) SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues); //getOrientation(得到选中的值) SensorManager.getOrientation(R, values); textView.setText( "X=" + values[0] + "\n" + "Y=" + values[1] + "\n" + "Z=" + values[2] + "\n"); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } }; @Override protected void onDestroy() { super.onDestroy(); if (sensorManager != null) { //注销监听 sensorManager.unregisterListener(listener); } } }
标签:
原文地址:http://www.cnblogs.com/520-1314/p/4802851.html