`

Android重力感应简介

 
阅读更多

Android重力感应简介

 

 

 

Android系统手机有很多重力感应游戏的应用,包括弹球,赛车等等游戏,android开发中共有8中传感器,包括:

   传感器名称如下:
       加速度传感器(accelerometer)
       陀螺仪传感器(gyroscope)
       环境光照传感器(light)
       磁力传感器(magnetic field)
       方向传感器(orientation)
       压力传感器(pressure)
       距离传感器(proximity)
       温度传感器(temperature)

当然有些手机是不全部包含这些传感器的,我们在开发是可以先在手机上进行测试,一般用的最多的就是重力传感器和方向传感器,现在我就分析一下重力传感器的简单应用:

 

 

  • 重力传感器:在Android手机中,将屏幕左下角的坐标设为原点,横向为X轴,纵向为Y轴,屏幕正上方为Z轴的正方向,在重力传感器中将得到3个参数X,Y,Z,其范围都在--10到+10之间,以X轴为例,当X轴正方向指向天时,X=10,指向地时X=--10,水平时X=0;Y轴和Z轴也是如此,所以当手机平放时,X=Y=0;Z=10

 

 

1.首先获得手机传感器管理对象

  sensorMgr=(SensorManager)getSystemService(SENSOR_SERVICE);

 

2.取得要用的管理器的类型

 sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

这里 TYPE_ACCELEROMETER是加速度传感器

3.实例化一个监听器

4.在要用传感器的时候注册监听器,不用的时候取消注册

 

代码实现如下:

 

package second.gravity;

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.view.MotionEvent;
import android.widget.Toast;

public class SecondSensor extends Activity {
	//传感器管理器对象
	private SensorManager sensorMgr;
	//传感器对象,此处用的是加速度传感器
	private Sensor sensor;
	//得到的各方向的加速度
	private float x,y,z;
	
	//创建Activiy
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //得到当前手机的管理器对象
        sensorMgr=(SensorManager)getSystemService(SENSOR_SERVICE);
        //得到加速度传感器对象
        sensor=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  
    }
    
    //实例化传感监听器,其中包含2个必须实现的方法
    SensorEventListener lsn=new SensorEventListener(){
		public void onAccuracyChanged(Sensor sensor, int accuracy) {	
		}

		public void onSensorChanged(SensorEvent event) {
			//得到加速度
			x=event.values[SensorManager.DATA_X];
			y = event.values[SensorManager.DATA_Y];  
	        z = event.values[SensorManager.DATA_Z]; 	
		}	
    };
    
    //添加一个触屏监听器,触屏式显示X,Y,Z的值
    public boolean onTouchEvent(MotionEvent event){
    	if(event.getAction()==MotionEvent.ACTION_DOWN){
    		//注册监听器,参数分别是监听器对象,传感器对象,检测的精准度
    		//精准度越精确,检测的频率越高,细微的行,x,y,z检测的更精确
    		sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME); 	
    		String str = "x=" + x + "; y=" + y + "; z=" + z; 
            Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG).show();  
    	}
    	return super.onTouchEvent(event); 	
    }
      
    //当Activiy激活时注册监听器
    public void onResume(){  
    	sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);     
        super.onResume();  
    }  
      
    //当Activiy暂停时取消注册
    public void onPause(){  
    	sensorMgr.unregisterListener(lsn);         
        super.onPause();  
    } 
     
    
}
 

 

敬请大家期待我的重力感应小游戏,一周后完成。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics