今天做了一个小Demo,主要是检测手机传个器种类个数,代码如下。
View Code
<RelativeLayout xmlns:android="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/tv_view" android:textStyle="italic" android:textSize="18sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="vertical" android:layout_centerHorizontal="true" android:text="@string/hello_world" /> </RelativeLayout>
View Code
package com.example.sensordemo; import java.util.List; import android.app.Activity; 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.text.method.ScrollingMovementMethod; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { private TextView tv_view; private Sensor sensor; private float x, y, z; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } private void init() { tv_view = (TextView) this.findViewById(R.id.tv_view); /** 设置实例化滚动方法 */ tv_view.setMovementMethod(ScrollingMovementMethod.getInstance()); // 从系统服务中获得传感器管理器 SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 从传感器管理器中获得全部的传感器列表 List<Sensor> allSensors = sm.getSensorList(Sensor.TYPE_ALL); // 显示有多少个传感器 tv_view.setText("经检测手机有" + "【" + allSensors.size() + "】" + "个传感器。" + "\n" + "他们分别是:\n"); // 显示每个传感器的具体信息 for (Sensor s : allSensors) { String temp = "\n" + "设备名称:" + s.getName() + "\n" + "设备版本:" + s.getVersion() + "\n" + "设备供应商:" + s.getVendor() + "\n"; switch (s.getType()) { case Sensor.TYPE_ACCELEROMETER: tv_view.setText(tv_view.getText().toString() + s.getType() + "加速度传感器:" + temp); break; case Sensor.TYPE_GRAVITY: tv_view.setText(tv_view.getText().toString() + s.getType() + " 重力传感器:" + temp); break; case Sensor.TYPE_GYROSCOPE: tv_view.setText(tv_view.getText().toString() + s.getType() + " 陀螺仪传感器:" + temp); break; case Sensor.TYPE_LIGHT: tv_view.setText(tv_view.getText().toString() + s.getType() + " 环境光线传感器:" + temp); break; case Sensor.TYPE_LINEAR_ACCELERATION: tv_view.setText(tv_view.getText().toString() + s.getType() + " 线性加速器:" + temp); break; case Sensor.TYPE_MAGNETIC_FIELD: tv_view.setText(tv_view.getText().toString() + s.getType() + " 电磁场传感器:" + temp); break; case Sensor.TYPE_ORIENTATION: tv_view.setText(tv_view.getText().toString() + s.getType() + " 方向传感器:" + temp); break; case Sensor.TYPE_PRESSURE: tv_view.setText(tv_view.getText().toString() + s.getType() + " 压力传感器:" + temp); break; case Sensor.TYPE_PROXIMITY: tv_view.setText(tv_view.getText().toString() + s.getType() + " 距离传感器:" + temp); break; case Sensor.TYPE_ROTATION_VECTOR: tv_view.setText(tv_view.getText().toString() + s.getType() + " 旋转向量:" + temp); break; case Sensor.TYPE_TEMPERATURE: tv_view.setText(tv_view.getText().toString() + s.getType() + " 温度传感器:" + temp); break; default: tv_view.setText(tv_view.getText().toString() + s.getType() + " 未知传感器:" + temp); break; } } // 在title上显示重力传感器的变化 sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); SensorEventListener lsn = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent e) { // TODO Auto-generated method stub x = e.values[SensorManager.DATA_X]; y = e.values[SensorManager.DATA_Y]; z = e.values[SensorManager.DATA_Z]; setTitle("x=" + (int) x + "," + "y=" + (int) y + "," + "z="+ (int) z); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } }; // 注册listener,第三个参数是检测的精确度 sm.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME); } }
效果图: