【社区出品】重力传感器
转自: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();}} --------------------编程问答-------------------- --------------------编程问答--------------------
补充:移动开发 , 移动开发其他问题