import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Map.Entry;
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
public class Main extends Activity implements SensorEventListener{
private TextView tvAccelerometer;
private TextView tvMagentic;
private TextView tvLight;
private TextView tvOrientation;
private TextView tvSensors;
private TextView tvAccuracy;
SensorManager sensorManager;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获得SensorManager对象
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
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);
tvAccuracy=(TextView)findViewById(R.id.tvAccuracy);
// 获得当前手机支持的所有传感器
tvSensors.setText("当前手机支持的所有传感器:\n");
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor:sensors)
{
// 输出当前传感器的名称
tvSensors.append(sensor.getName() + "\n");
}
}
public void onResume()
{
super.onResume();
registerSensorListener();
}
public void onPause()
{
unRegisterSensorListener();
super.onPause();
}
private void registerSensorListener()
{
// 注册加速度传感器
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);
}
private void unRegisterSensorListener()
{
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent event)
{
// 通过getType方法获得当前传回数据的传感器类型
switch (event.sensor.getType())
{
case Sensor.TYPE_ACCELEROMETER: // 处理加速度传感器传回的数据
String accelerometer = "加速度\n" + "X:" + event.values[0] + " "
+ "Y:" + event.values[1] + " " + "Z:" + event.values[2];
tvAccelerometer.setText(accelerometer);
break;
case Sensor.TYPE_LIGHT: // 处理光线传感器传回的数据
tvLight.setText("亮度:" + event.values[0]);
break;
case Sensor.TYPE_MAGNETIC_FIELD: // 处理磁场传感器传回的数据
String magentic = "磁场\n" + "X:" + event.values[0] + " " + "Y:"
+ event.values[1] + " " + "Z:" + event.values[2];
tvMagentic.setText(magentic);
break;
case Sensor.TYPE_ORIENTATION: // 处理方向传感器传回的数据
String orientation = "方向\n" + "X:" + event.values[0] + " "
+ "Y:" + event.values[1] + " " + "Z:" + event.values[2];
tvOrientation.setText(orientation);
break;
}
}
HashMap<String,Integer> hashMapAccuracy=new HashMap<String,Integer>();
StringBuffer strBuffer=new StringBuffer(50);
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{
hashMapAccuracy.put(sensor.getName(), accuracy);
Set<Entry<String,Integer>> set=hashMapAccuracy.entrySet();
strBuffer.delete(0, strBuffer.length());
for(Entry<String,Integer>entry:set)
{
strBuffer.append("传感器"+entry.getKey()+"的精度改变为:"+entry.getValue()+"\n");
}
tvAccuracy.setText(strBuffer.toString());
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/tvAccelerometer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvMagentic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvLight"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvOrientation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvSensors"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tvAccuracy"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>