当前位置:编程学习 > wap >>

【社区出品】重力传感器

转自:http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=42017&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D67

大家好,我是社区yuchina 很开心和大家一起讨论和研究 android 强大功能传感器。这个也是非常有意思非常好玩的功能,应用在生活中更能接进我们的需要。当然要了现在很游戏也使了此功能。
要学好android 传感器或开发出更为出色功能,数学、几何物体运算和物理现象、原理很重要,可以这么说这些东西都我们初中、高中时期都以经学到过了不必但心。如计算 长度、角度、孤度 某位置点距离 等等。
不明白或忘记了可去翻下以前书,呵呵说远了。相信大家能够来学android 传感器都是有一点经验。有过3D开发经验的人能更快入手。以前我开发flash 的时候公司需要用as3开发3D 效果感到很为兴奋因为adobe cs5以经增加更为强大的3D功能效果那是非常的棒。没想到在 android 手机应用又有机会学习类似的功能非常有冲劲。当然现在的android 也能开发3D了不过可惜的是没时间进一步研究,有时间再一起学习吧。
好现在我就简介下android 强大功能传感器 目前我知道的主要有八种 类型
传感器类型有:方向、加速度(重力)、光线、磁场、距离(临近性)、温度、压力、回转仪。 
    所有类型:          Sensor.TYPE_ALL 默认为 加速度(重力)
    压力计传感器:        Sensor.TYPE_PRESSURE
    回转仪传感器:        Sensor.TYPE_GYROSCOPE
    方向传感器:        Sensor.TYPE_ORIENTATION    
    加速度(重力)传感器: Sensor.TYPE_ACCELEROMETER    
    光线传感器:          Sensor.TYPE_LIGHT
    磁场传感器:        Sensor.TYPE_MAGNETIC_FIELD    
    距离(临近性)传感器: Sensor.TYPE_PROXIMITY    
    温度传感器:        Sensor.TYPE_TEMPERATURE
这里呢我拿一种来实例介绍就是 加速度(重力)传感器:    Sensor.TYPE_ACCELEROMETER 。
想得到这些感应器的数据很简单,最重要的是和实例结合起来运算 得到实际效果
//获取某种类型的感应器
Sensor sensor = mManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  
//注册监听,获取传感器变化值
sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
最快: SensorManager.SENSOR_DELAY_FASTEST
  该种模式可能造成手机电力大量消耗。
游戏: SensorManager.SENSOR_DELAY_GAME
     绝大多数的实时性较高的游戏都使用该级别。
普通: SensorManager.SENSOR_DELAY_NORMAL 
  一般的益智类或EASY级别的游戏可以使用。
用户界面: SensorManager.SENSOR_DELAY_UI    
一般对于屏幕方向自动旋转使用。  以下面我简单的做了个图 来表示下各 x y z 轴
请注意各轴的 + 和 -

当手机倾斜方向改变时,监听器会调用该方法(onSensorChanged(SensorEvent event) )。
我们要做的,就是填充该方法,用于在重力发生变化时进行我们自己的处理。
当 x=y=0 时,手机处于水平放置状态。
当 x=0 并且 y>0 时,手机顶部的水平位置要大于底部,也就是一般接听电话时手机所处的状态。
当 x=0 并且 y<0 时,手机顶部的水平位置要小于底部。手机一般很少处于这种状态。
当 y=0 并且 x>0 时,手机右侧的水平位置要大于左侧,也就是右侧被抬起。
当 y=0 并且 x<0 时,手机右侧的水平位置要小于左侧,也就是左侧被抬起。
当 z=0 时,手机平面与水平面垂直。
当 z>0 时,手机屏幕朝上。
当 z<0 时,手机屏幕朝下。
下面入正题获得简单数据实例
package Sensor_yuchina.s;
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.widget.TextView;
public class sensor extends Activity implements SensorEventListener{
private SensorManager mManager = null;   
private Sensor mSensor = null;
private TextView tv;   //声明成员变 和接入监听器
  @Override  
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
    setContentView(R.layout.main);//获得传感器服务
     mManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
     tv=(TextView)findViewById(R.id.tv);} 
    public void onSensorChanged(SensorEvent event) { //这里可以得到传感器实时测量出来的变化值   
     //获取感应器的三值 当手机倾斜方向改变时,监听器会调用该方法。
    float x = event.values[SensorManager.DATA_X]; 
    float y = event.values[SensorManager.DATA_Y];  
    float z = event.values[SensorManager.DATA_Z];   
    tv.setText("this X:"+x+"this Y:+y+"this Z:"+z ); }     
public void onAccuracyChanged(Sensor s, int accuracy) {   //这是感应器构造涵数  }  
 @Override
 protected void onResume() {//这里是生命周期 我就不介绍了 ,相信大家都非常明白
     //获取某种类型的感应器 加速度(重力)用它  Sensor.TYPE_ACCELEROMETER    
      mSensor = mManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);     
       // 第一个参数监听器当前,第二  参数 感应器类型  第三参数是感应的灵敏度 也称为采样率   
      mManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);
     super.onResume(); }   
@Override    
protected void onPause() {//这里是也生命周期
   //这里一定要取消监听器,不然浪费资源会很大。
    mManager.unregisterListener(this);
        super.onPause();}} --------------------编程问答-------------------- --------------------编程问答--------------------
补充:移动开发 ,  移动开发其他问题
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,