当前位置: 代码迷 >> Android >> 进阶2之Android重力感应(二)
  详细解决方案

进阶2之Android重力感应(二)

热度:96   发布时间:2016-04-28 02:29:49.0
进阶二之Android重力感应(二)

路途再远也要一步步的走不止为了生存而是对其的热爱


本讲内容:Android重力感应


一、SensorMannager传感器管理对象

1、取得SensorMannager

手机中的所有传感器都须要通过SensorMannager来访问,调用getSystemService(SENSOR_SERVICE)方法就可以拿到当前手机的传感器管理对象。

sm = (SensorManager) getSystemService(SENSOR_SERVICE);


2、取得Sensor目标各类的值(getSensorList()方法来取得

List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_TEMPERATURE);  

3、实现取得传感器Sensor状态的监听功能

public void onAccuracyChanged(Senso sensor,int accuracy);  在感应检测到Sensor的精密度有变化时被调用到。   
public void onSensorChanged(SensorEvent event);  在感应检测到Sensor的值有变化时会被调用到。   

public void onSensorChanged(SensorEvent e) {				x = e.values[SensorManager.DATA_X];				y = e.values[SensorManager.DATA_Y];				z = e.values[SensorManager.DATA_Z];			}

4、注册SensorListener

<pre name="code" class="java">sm.regesterListener(SensorEventListener listener, Sensor sensor, int rate);  
 第一个参数:监听Sensor事件,第二个参数是Sensor目标种类的值,第三个参数是延迟(检测)时间的精度密度。延迟时间的精密度参数如下:
参数
延迟时间
SensorManager.SENSOR_DELAY_FASTEST
0ms
SensorManager.SENSOR_DELAY_GAME
20ms
SensorManager.SENSOR_DELAY_UI
60ms
SensorManager.SENSOR_DELAY_NORMAL
200ms
因为传感器Sensor的服务是否频繁和快慢都与电池参量的消耗有关,同时也会影响处理的效率,所以兼顾到消耗电池和处理效率的平衡,设置感应检测Sensor的延迟时间是一门重要的学问,需要根据应用系统的需求来做适当的设置。感应检测Sensor的硬件检测组件受不同的厂商提供。你可以采用Sensor的getVendor(),Sensor()的getName()和Sensor的getVeesrion()方法来取得 厂商的名称、产品和版本。

5、取消注册

sm.unregisterListener(SensorEventListener listener)  


下面是一个重力感应应用

下面是res/layout/activity_main.xml 布局文件:

<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="com.example.test1.MainActivity$PlaceholderFragment" >    <TextView        android:id="@+id/tv"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textSize="30dp" /></RelativeLayout>

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity {	private TextView tv;	private SensorManager sm;	Sensor sensor;	private float x, y, z;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);		tv = (TextView) findViewById(R.id.tv);		sm = (SensorManager) getSystemService(SENSOR_SERVICE);		sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);		SensorEventListener listener = new SensorEventListener() {			@Override			public void onSensorChanged(SensorEvent e) {				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);				tv.setText("x=" + (int) x + ", " + "y=" + (int) y + ", " + "z=" + (int) z);			}			@Override			public void onAccuracyChanged(Sensor arg0, int arg1) {			}		};        sm.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME); 	}}



本讲就到这里,Take your time and enjoy it


  相关解决方案