Android开发,实现摇一摇功能

SensorManager对象:


常量:
int  TYPE_ACCELEROMETER 加速度 
                int  TYPE_ALL 所有类型,NexusOne默认为 加速度 
                int  TYPE_GYROSCOPE 回转仪(这个不太懂) 
                int  TYPE_LIGHT 光线感应
                int  TYPE_MAGNETIC_FIELD 磁场 
                int  TYPE_ORIENTATION 定向(指北针)和角度 
                int  TYPE_PRESSUR 压力计 
                int  TYPE_PROXIMITY 距离 
                int  TYPE_TEMPERATURE 温度啦


1. 通过getSystemService(SENSOR_SERVICE)方法获取SensorManager对象


2. 创建一个 SensorListener /*SensorEventListener* /监听器,实现 onAccuracyChanged(int sensor, int accuracy) 
   和onSensorChanged(int sensor, float[] values)方法


3  在onSensorChanged(int sensor, float[] values)内判断是否为“摇一摇”动作(使用常量 intTYPE_ACCELEROMETER)


4  使用  SensorManager对象的registerListener(SensorListener listener, int sensors, int rate)方法注册监听


 参数sensors: 所得到的传感器类型  Sensors sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);


 参数rate: SENSOR_DELAY_FASTEST 最灵敏
                SENSOR_DELAY_GAME 一般(游戏)
                SENSOR_DELAY_NORMAL 比较慢。
                SENSOR_DELAY_UI 最慢的


5  使用  SensorManager对象的unregisterListener(SensorListener listener) 取消监听;

代码:

1.    MainActivity.java

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;

public class MainActivity extends Activity
{

	private SensorManager sensorManager = null;
	private SensorEventListener mListener = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

		mListener = new SensorEventListener()
		{

			@Override
			public void onSensorChanged(SensorEvent event)
			{
				// TODO Auto-generated method stub
				float[] values = event.values;
				float x = values[0];
				//float y = values[1];
				float z = values[2];

				
				int medumValue = 15;
				//一般摇一摇动作是其位置在空间的X轴和Z轴上的变动
				if (Math.abs(x) > medumValue /*&& Math.abs(y) > medumValue*/ && Math.abs(z) > medumValue)
				{
					Intent intent =  new Intent(MainActivity.this, SecondActivity.class);
					startActivity(intent);
					
				}

			}

			@Override
			public void onAccuracyChanged(Sensor sensor, int accuracy)
			{
				// TODO Auto-generated method stub

			}
		};
	}

	@Override
	protected void onResume()
	{
		super.onResume();
		//注册监听器
		if(sensorManager!= null)
			sensorManager.registerListener(mListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),sensorManager.SENSOR_DELAY_GAME );
			
	}

	@Override
	protected void onStop()
	{
		super.onStop();
		//取消监听器
		sensorManager.unregisterListener(mListener);
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


2.     SecondActivity.java

import android.app.Activity;
import android.os.Bundle;

public class SecondActivity extends Activity
{

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
	}

}



你可能感兴趣的:(学习笔记,Android开发,Android)