码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-01-30 22:55:29      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

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


本讲内容: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


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

标签:

原文地址:http://blog.csdn.net/liguojin1230/article/details/43307461

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!